仕事の方で、WordPressに『Nelio Content』プラグインを入れて、X(旧Twitter)に自動投稿してたんですが、XのAPI仕様変更からずっと使用不能に陥っていました。
なので、最近『Autopost for X』に乗り換えたところ、カスタムメッセージ内での改行が反映されないので、なんとかしてみました。
以前は結構頑張ってくれてた、ねりおくん。
でももう息してないので、こちらに鞍替えしました。
機能はシンプルですが、一応自動ポスト自体はうまく動いてくれています。
ただし、自分で記事毎のカスタムメッセージを入力すると改行が空白文字に変換されてしまう…!
// こう入力したら
1行目
2行目
3行目
// ポスト内容はこうなる
1行目 2行目 3行目
このままでは使いづらいので、ソースコードを読んでみたんですが、フォームから取得した時点で、メッセージ内容をsanitize_text_field
関数で処理しちゃってるんですよね。
$tweet_body = sanitize_text_field( $tweet_body );
$tweet_body = html_entity_decode( $tweet_body, ENT_QUOTES, get_bloginfo( 'charset' ) );
こやつは改行文字を空白に置換してしまうようです。余計な事をしよって…
sanitize_text_field() – Function | Developer.WordPress.org
・ Checks for invalid UTF-8,
・ Converts single < characters to entities
・ Strips all tags
・ Removes line breaks, tabs, and extra whitespace
・ Strips percent-encoded characters
仕方ないので、autoshare_for_twitter_tweet
フックで指定の文字列を改行に置換するコールバックを作成しました。
テーマファイルのfunctions.phpに記述します。
function autoshareForTwitterReplaceLineBreak( $update_data, $post ) {
$update_data['text'] = str_replace( '&br ', "\n", $update_data['text'] );
return $update_data;
}
add_filter( 'autoshare_for_twitter_tweet', 'autoshareForTwitterReplaceLineBreak', 10, 2 );
&br
という文字列の後に空白が続くパターンがあれば、改行に変換されるというものです。
空白は含めなくてもでもいいのですが、メッセージ入力時に改行入れて確認したいと思ったので、空白に変換された改行を想定しています。
この辺りは正規表現置換にするなり、煮るなり焼くなりお好きにすればいいでしょう。
この実装例では以下のような変換結果になります。
// こう入力したら
1行目&br
2行目&br
3行目
// ポスト内容はこうなる
1行目
2行目
3行目
// こう入力しても同じ
1行目&br 2行目&br 3行目
まあ、そのうちこんなことしなくても改行を入れられるように修正してくれるでしょう。
めでたし!
コメント