WordPress

Autopost for Xのカスタムメッセージに改行を入れる

仕事の方で、WordPressに『Nelio Content』プラグインを入れて、X(旧Twitter)に自動投稿してたんですが、XのAPI仕様変更からずっと使用不能に陥っていました。
なので、最近『Autopost for X』に乗り換えたところ、カスタムメッセージ内での改行が反映されないので、なんとかしてみました。

以前は結構頑張ってくれてた、ねりおくん。

Nelio Content – Best Editorial Calendar & Social Media Scheduling
The best editorial calendar to manage your blog. A complete solution for sharing your posts on social media. Save time w...

でももう息してないので、こちらに鞍替えしました。

Autopost for X (formerly Autoshare for Twitter)
Automatically shares the post title or custom message and a link to the post to X/Twitter.

機能はシンプルですが、一応自動ポスト自体はうまく動いてくれています。
ただし、自分で記事毎のカスタムメッセージを入力すると改行が空白文字に変換されてしまう…!

// こう入力したら
1行目
2行目
3行目

// ポスト内容はこうなる
1行目 2行目 3行目

このままでは使いづらいので、ソースコードを読んでみたんですが、フォームから取得した時点で、メッセージ内容をsanitize_text_field関数で処理しちゃってるんですよね。

autoshare-for-twitter/includes/utils.php at f7be6f1cee4e4bdb32f876b2c3dbd26d5aeb9a4b · 10up/autoshare-for-twitter

$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行目

まあ、そのうちこんなことしなくても改行を入れられるように修正してくれるでしょう。
めでたし!

スポンサーリンク
記事を書いた人

システムえんじにゃー🐈
趣味はエレキギター、自転車など。作曲したい。
World of Warshipsやってます。
記事に関する質問はお気軽にどうぞ。

surface0 (さーふぇす)をフォローする
surface0 (さーふぇす)をフォローする

コメント

タイトルとURLをコピーしました