SEOプラグインと言えば、All In ONE SEOかyoast SEOがプラグインの定番です。日本だとAll in One SEOをインストールしている人が多いかもしれません。
この2つのプラグインはリリース当初は無料版でもいろんな機能が使えたのですが、その後、無料版の機能削減がすざまじく、フックを使わないとほとんどカスタマイズが出来ない状態になってしまい、あまり使いたくないプラグインになり下がりました。
そんな中、シンプルな機能を売りとしてリリースされたSEO SIMPLE PACKは、まだ発展途上という感じですが、フックなどを使うと十分使えるレベルなので気に入って使っています。

SEO SIMPLE PACKを使っているサイトで、カスタム投稿のmeta descriptionが出力されていないことに気が付きました。
この記事では、SEO SIMPLE PACKでmeta descriptionが出力されない時の原因と対策についてまとめておきたいと思います。
#この記事で紹介している内容はSEO SIMPLE PACKのプラグイン本体の修正を行うカスタマイズを含んでいます。自己責任でお願いします。
meta descriptionが出力されないのはなぜ?
meta descriptionが出力されなかったのは、カスタム投稿タイプの記事でした。
そのカスタム投稿はacfとthe_contentフィルターを使ってコンテンツを生成しているので、本文は何も書かれていません。本文が無いので出力されないのは正しいと言えば正しい。
ですが、acfとthe_contentを通った後の内容が反映されて欲しい。
プラグインのソースを見たら、meta descriptionの生成部分でthe_contentフィルターを通す前のデータを参照しているようでした。
これは実務レベルだと結構大きな問題になります。
meta descriptionが出力される部分のソース
このままだと、ちょっと使えないので、ひとまずプラグインのソースを一時的に修正してみたら正常に表示されるようになりました。
プラグイン本体の修正になりますので、恒久的な処置にはなりません。間違えてアップデートしてしまったときのために記録として残しておきたいと思います。
githubがwordpress pluginの最新じゃない可能性があります。
// description
if ( false !== strpos( $str, '%_page_contents_%' ) ) {
$word_count = apply_filters( 'ssp_description_word_count', 120 );
$content = wp_strip_all_tags( do_shortcode( $obj->post_content ), true ); // 改行なども削除
$content = mb_substr( $content, 0, $word_count );
$str = str_replace( '%_page_contents_%', $content, $str );
}
ショートコードの展開までは考慮してくれているようですが、the_contentフィルターを通していないので、the_contentフィルターを通して記事を作っている場合は中身が空っぽになります。
同じような話が以前にもあって、the_contentフィルターを通すのは忘れられていることが多いです。
meta descriptionが正常に出力されるための修正
非推奨:プラグインを直接書き換える方法
$obj->post_contentがmeta descriptionになります。
$objがWP_post objectでそのpost_contentを参照しているので、そこにthe_contentフィルターをかませます。

// description
if ( false !== strpos( $str, '%_page_contents_%' ) ) {
$word_count = apply_filters( 'ssp_description_word_count', 120 );
$content = wp_strip_all_tags( do_shortcode( apply_filters( 'the_content',$obj->post_content) ), true ); // 改行なども削除
$content = mb_substr( $content, 0, $word_count );
$str = str_replace( '%_page_contents_%', $content, $str );
}
推奨:フックでmeta descriptionを書き換えるカスタマイズ
プラグインを書き換えなくともフックでカスタマイズしても同じことができました。
プラグインの該当する部分をフックで上書きすればソースを修正する必要はありませんでした。
こちらの方が良いでしょうね。
function overwrite_ssp_description($ssp_description) {
global $post;
$post_id = $post->ID;
if ( is_singular('xxx') ) {//特定の条件だけ適用
$word_count = apply_filters( 'ssp_description_word_count', 120 );
$content = wp_strip_all_tags( do_shortcode( apply_filters( 'the_content',$post->post_content) ), true ); // 改行なども削除
$content = mb_substr( $content, 0, $word_count );
return $content;
}
return $ssp_description;
}
add_filter('ssp_output_description', 'overwrite_ssp_description');
まとめ
Swellの作者さんのプラグインなのでブログメインの使い方でしかテストしていないのかな?と思いますが、記事が空っぽでthe_contentを通して生成している場合にも是非対応してほしいところです。