このブログではTwitterやFacebookに記事を共有するため、高機能プラグイン「Jetpack」の機能の一つ、「パブリサイズ共有」を使用している。
数日前にそのJetpackのアップデートがあったのだが、それから、TwitterとFacebookへのポストの文章の改行がすべて消されてしまうようになった。
亀鳴く 昃るやむさし野原に亀鳴けば 僧独り亀鳴く里を過ぎにけり 亀鳴くや理屈は知らず潜む兵 佐藤俊夫 #kigo #jhaiku #haiku #saezuriha https://t.co/bPgxTq9IHH
— SatoToshio (@SatoToshio) March 5, 2022
私は最近、俳句のポストをすることが多いが、3句ぐらい詠んだ俳句が全部一行でポストされてしまった。左の如しである。
これは嫌だ。
WordPressは所詮PHPで書かれたものなので、嫌ならソースコードを修正すればよい。
土曜日で、今日は休みだ。時間があるから早速Jetpackのソースコードを読んだ。
はじめ、WordPressのプラグインエディタでJetpackのソースコードを読んでみたが、どうもそこには表れてこないソースのようだ。仕方なく、FTP経由でサーバにあるソースを読む。
「wp-content/plugins/jetpack/modules/publicize/publicize.php」にどうやらそれらしい記述を見つけた。
$from_web = isset( $_SERVER['REQUEST_METHOD'] ) && 'post' === strtolower( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_METHOD'] ) ) ) && ! empty( $admin_page ); // phpcs:ignore WordPress.Security.NonceVerification.Missing $title = isset( $_POST['wpas_title'] ) ? sanitize_text_field( wp_unslash( $_POST['wpas_title'] ) ) : null;
この赤字の部分らしい。
この「sanitize_text_field()」という関数はWordPressの関数で、生のテキストからタグやらSQLインジェクションやら、汚いものをサニタイズしてくれる関数である。ところが、綺麗にしてくれるのは有難いが、改行コードまで全部サニタイズしてしまうのである。改行だけは許したい場合、この「sanitize_text_field()」ではなく「sanitize_textarea_field()」のほうを使う。
早速この部分を「エイヤ」とばかり書き替えて試す。
$from_web = isset( $_SERVER['REQUEST_METHOD'] ) && 'post' === strtolower( sanitize_textarea_field( wp_unslash( $_SERVER['REQUEST_METHOD'] ) ) ) && ! empty( $admin_page ); // phpcs:ignore WordPress.Security.NonceVerification.Missing $title = isset( $_POST['wpas_title'] ) ? sanitize_textarea_field( wp_unslash( $_POST['wpas_title'] ) ) : null;
Jetpack パブリサイズ共有 改行テスト02 本文
1行目
2行目
— SatoToshio (@SatoToshio) March 5, 2022
テストしてみると、TwitterもFacebookもどうやら意図した改行になったようだ。……ふう、やれやれ。
JetpackのソースコードはGitHubにある。そこで修正を提案するのもありかな、とかすかに思ったが、こういうことがしたいのは多分私だけだろう、とも思うので、やめた。
それに、この修正がシステムの他の部分にどういう影響を及ぼすかをテストしなければならないが、面倒臭いからする気がない。
WordPressのように多くの機能とコードからなるシステムのテストなんて今の私にはできかねる。ではオープンソースらしく、世界の多くの人々と協力したり連携したりして、皆でやればよいという話になるが、それも面倒臭くて嫌だ。
WordPressは世界システムだから、皆でテストしようとすると英語で
当然のことだが、このような方法はあまりお勧めは致しかねる。というのも、このように作動中のソースコードをサーバ上で修正すると、Jetpackのアップデートがあるたびに同じ個所を修正しなければならないからである。私はJetpackのOGPの投稿動作や画像挿入時のWordPressの動作をカスタマイズして使っているが、JetpackのアップデートやWordPressのアップデートのたびにソースを修正しなおしており、これはこれで結構面倒臭い。