マストドンに送られる時にコードの部分に改行コードが残るためマストドンで空白行が生じてしまう問題に対処してみる。
まずは、対処しない場合のテスト。
一行目
二行目
最初の対処。functions.phpに次のコードを追加。結果は「更新に失敗しました。」で更新できず。
/**
* Filter the content of the comment.
*
* @param string $content
* @param WP_Comment $comment
* @return string The filtered value.
*/
function my_activitypub_the_content_callback( string $content, WP_Comment $comment ) {
// Your code here.
$content = \preg_replace( '/[\n\r\t]/', '', $content );
return $content;
}
add_filter( 'activitypub_the_content', 'my_activitypub_the_content_callback', 10, 2 );
activitypub_the_content · Automattic/wordpress-activitypub Wiki · GitHub
https://github.com/Automattic/wordpress-activitypub/wiki/activitypub_the_content
次のコードに修正。
/**
* ActivityPub用のコンテンツをカスタマイズする
*
* @param string $content 投稿本文
* @param WP_Post $post 投稿オブジェクト
* @return string
*/
function my_activitypub_the_content_add( $content, $post ) {
// $post が WP_Post であることを確認(念のため)
if ( ! $post instanceof WP_Post ) {
return $content;
}
// 改行やタブを削除
$content = \preg_replace( '/[\n\r\t]/', '', $content );
return $content;
}
add_filter( 'activitypub_the_content', 'my_activitypub_the_content_add', 10, 2 );
テスト結果:
コードに空白行が入る問題には対処できたが、「 まずは、対処しない場合のテスト。」の前の改行タグまで削除されてしまったので、コードは削除しておく。ただ、対処前から削除されていたので、以前に修正したコードの再修正が必要。
WordPressの抜粋で改行が削除される原因は wp_posts テーブルの post_content | いしい@試行錯誤
https://ishii00141.stars.ne.jp/20251203-1656-4312/
次のコードを丸ごとコメントアウトしてテスト。
// wp_posts テーブルの post_content 作成時に改行タグの後ろに改行(\n)を挿入する。
function save_newline_to_post_content_fixed($data, $postarr) {
// post_contentがある場合のみ処理する
if (isset($data['post_content'])) {
$content = $data['post_content'];
// 【修正点】preg_quote を使わず、パターンを直接記述します。
// 正規表現パターン:
// 1. < の直後に br (または BR) が続く
// 2. その後にスラッシュ、スペース、または何も続かない (/?\s*)
// 3. その後に > が続く
// 4. タグの後に続く空白文字 (\s*)
$pattern = '/(<br\s*\/?>)\s*/i';
// 置換: マッチしたタグ全体 ($1) の後に改行(\n)を挿入する
$content = preg_replace(
$pattern,
'$1' . "\n",
$content
);
// 変更したコンテンツをデータ配列に戻す
$data['post_content'] = $content;
}
return $data;
}
結果は:
・「 まずは、対処しない場合のテスト。」の前の<br>が削除されて、改行コードもない。
・コードは空白行が挟まる。
いったん、元に戻すが、疑問点は、次の投稿の Shift+Enter の改行では、改行後が<p></p>で囲まれていること。これも希望通りではないが、このテストと異なる結果なのが気になる。データベースの post を見ると、<br>の後が改行されていて、それも、このテストと異なる。
ハッシュタグ修正が可能かテストする | いしい@試行錯誤
https://ishii00141.stars.ne.jp/20251220-1047-4715/
修正:
「// wp_posts テーブルの post_content 作成時に改行タグの後ろに改行(\n)を挿入する。」の終わりに次のコードを誤って削除してしまったことに気づいたので修正。
// 記事データ挿入/更新時に上記の関数を実行する
add_filter('wp_insert_post_data', 'save_newline_to_post_content_fixed', 10, 2);
再テスト:上記ミス以外では問題なかった次のコードを追加する。
/**
* ActivityPub用のコンテンツをカスタマイズする
*
* @param string $content 投稿本文
* @param WP_Post $post 投稿オブジェクト
* @return string
*/
function my_activitypub_the_content_add( $content, $post ) {
// $post が WP_Post であることを確認(念のため)
if ( ! $post instanceof WP_Post ) {
return $content;
}
// 改行やタブを削除
$content = \preg_replace( '/[\n\r\t]/', '', $content );
return $content;
}
add_filter( 'activitypub_the_content', 'my_activitypub_the_content_add', 10, 2 );

コメント
再テストの結果、マストドンでは次のように表示された。ただ、抜粋文字数が297文字なので、何か3文字が削除された。
297文字だった原因:
「* @param string $content 」が
「* @param string $content」になり、タブと末尾の空白が削除された。
「* @param WP_Comment $comment 」が
「* @param WP_Comment $comment」になり、末尾の空白が削除された。
合計3文字が削除された。
300文字カウントプログラムは正常に動作している。
「// 改行やタブを削除」のコードでタブは削除しないことにして実際のコードを変更しておいた。