トリミング3
先日から投稿ページ下部に、関連記事を表示するプラグインを導入しました。人気プラグインである、WordPress Related Postsというのを使っています。関連記事の表示形式などの設定が豊富で、様々な形式で表示できます。今使っているテーマとの相性やモバイルでの表示を考えて、選べるテーマの中からmodernを選択しました。
設定の中に、記事タイトルだけじゃなくて、サムネイルや抜粋を表示する選択が出来るので、それを選択した結果、表示されるようになったのが、これです。
アイキャッチ画像が設定されていると、それがサムネイル表示され、投稿日とタイトルの後に、指定した文字列の抜粋がつきます。いい感じです。
んっ?
上の2つと下の3つ、比べると明らかに抜粋文字数が違いますよね?設定上は150文字、日本語にすると75文字、投稿日から数えて、タイトルも含むので、多少の違いはありますが、ちょっと違いすぎる。仕方ないのでコードを見てみます。プラグインディレクトリのinit.phpです。
function wp_rp_text_shorten($text, $max_chars) { $shortened_text = mb_substr($text, 0, $max_chars - strlen(WP_RP_EXCERPT_SHORTENED_SYMBOL)); $shortened_words = explode(" ", $shortened_text); $shortened_size = count($shortened_words); if ($shortened_size > 1) { $shortened_words = array_slice($shortened_words, 0, $shortened_size - 1); $shortened_text = implode(" ", $shortened_words); } return $shortened_text . WP_RP_EXCERPT_SHORTENED_SYMBOL; //'...'; }
なるほど、一応漢字などのマルチバイトのことを考慮して、substr関数ではなく、mb_substr関数を使っている。気持ちはわかるが、それじゃないw ここで使うべきなのは、mb_strimwidth関数。その後の、英単語の禁則処理、切っちゃいけないところで切らないように、特定の文字かスペースで切り捨てる処理?みたいなのが悪さをしているようなので、次のように修正する。
function wp_rp_text_shorten($text, $max_chars) { $shortened_text = mb_strimwidth($text, 0, $max_chars - strlen(WP_RP_EXCERPT_SHORTENED_SYMBOL)); return $shortened_text . WP_RP_EXCERPT_SHORTENED_SYMBOL; //'...'; }
そうするとこんな結果に。ほぼ揃いましたね。人気のプラグインなのに、この組み合わせで使っている人っていないのかな?日本語が母国語じゃない人に、いくら説明してもこの問題わかってくれないんですよね。説明のまずさもあるけど、そもそも理解できないみたい。なので、最近は自分の中で対処するだけで、説明することは無くなりました。今回は例外中の例外ですw
※コメントを非公開としたので、以下に再掲します。
最終的に、改行記号で区切る設定としました。
function wp_rp_text_shorten($text, $max_chars) { $shortened_text = mb_strimwidth($text, 0, $max_chars - strlen(WP_RP_EXCERPT_SHORTENED_SYMBOL)); $shortened_words = explode(" ", $shortened_text); $shortened_size = count($shortened_words); if ($shortened_size > 1) { $shortened_words = array_slice($shortened_words, 0, $shortened_size - 1); $shortened_text = implode(" ", $shortened_words); } return $shortened_text . WP_RP_EXCERPT_SHORTENED_SYMBOL; //'...'; }
なんかプラグインの中で、勝手に制作元のサーバーにアクセスするみたいな動きがあったので、URL設定を無効にしました。何か不都合あるかな?様子見。
//define('WP_RP_STATIC_BASE_URL', 'https://wprp.zemanta.com/static/'); //define("WP_RP_ZEMANTA_API_URL", "http://api.zemanta.com/services/rest/0.0/"); //define("WP_RP_ZEMANTA_SUBSCRIPTION_URL", "http://prefs.zemanta.com/api/"); define('WP_RP_STATIC_THEMES_PATH', 'static/themes/'); define('WP_RP_STATIC_JSON_PATH', 'json/'); //define('WP_RP_CONTENT_BASE_URL', 'https://wprp.zemanta.com/static/'); //define("WP_RP_ZEMANTA_UPLOAD_URL", "http://prefs.zemanta.com/api/upload-articles/"); //define("WP_RP_ZEMANTA_ARTICLE_COUNT_URL", "http://prefs.zemanta.com/api/article-count/");
関連記事の表示位置調整のため、/static/themes/modern.cssにmargin-top: 4em;を追加しているのでメモ。
.wp_rp_wrap { margin-top: 4em; clear: both; }
config.phpで省略記号[…]を…に変更します。
//define("WP_RP_EXCERPT_SHORTENED_SYMBOL", " […]"); define("WP_RP_EXCERPT_SHORTENED_SYMBOL", " …");
最終更新日: 2019年6月14日