web関連

wordpressのエディタ内の本文をループ外で取得して文字数を制限してdescriptionに挿入する方法

wordpressのエディタ内の本文をループ外で取得して文字数を制限してdescriptionに挿入する方法

the_content()やget_the_content()と同じような機能でループ外でエディター内のテキストを出力する時に使った時のメモ

とりあえずループ外で出力する方法

なにも考えずとりあえずループ外で使いたいときは以下のコード

//整形後の本文を取得
<?php echo mb_substr(strip_tags(apply_filters('the_content', $post->post_content)), 0, 300); ?>
//整形前の本文を取得
<?php echo mb_substr($post->post_content, 0, 300); ?>

整形後はhtmlタグを除いた奴で、整形前はhtmlタグが混ざったやつです。
整形前のコードは使わない方がいいみたいです。

参考

▼$post->post_content;は整形前の生のデータを抜き出してしまう
https://hacknote.jp/archives/4148/ふぃ

補足

mb_substr()
文字列から文字数指定して取得できる
strip_tags()
文字列から HTML および PHP タグを取り除く
apply_filters()
htmlなどテキストを修正して返すフックでテーマのカスタマイズに必要らしい

参考

▼Welcart のカスタマイズとフック(フックについて書いてある)
https://www.welcart.com/archives/techinfo/techinfo-20180105

▼apply_filters と add_filter の使用方法。
http://blog1.dd-company.com/using-apply-filters-and-add-filter/

手間はかかるがfunction.phpに追加して使いまわしやすくする方法

前述したやり方でも出力できるけどコードが汚くなるのでfunction.phpにオリジナル関数を追加して出力する方法

function twotone_get_content($num = 100) {
global $post;
$return_str = trim(strip_tags($post->post_content));
$return_str = str_replace(array("r", "n", "&nbsp;"), '', $return_str);
if( mb_strlen($return_str) > $num ) {
$return_str = mb_substr($return_str, 0, $num). '...';
}
return $return_str;
}

以下、出力方法

// 出力(descriptionに使いたいので300文字で出力)
<?php echo twotone_get_content(300); ?>

meta周りの出力とかはプラグインを使って自動で出力していたから特に気にしていなかったけど、会社で使うプラグインを減らしていこうという流れになり今回の調査につながりました。
案件によってうまく出力できていなかったりして検索エンジンにそれで登録されお客さんからのクレームが怖い...