特定のショートコードが本文内にあるかどうかによって処理を分岐する方法

特定のショートコードが本文内にあるかどうかによって処理を分岐する方法

あまり使わないかも知れませんが、投稿や固定ページの本文内に特定のショートコードがあったら...なかったら...で処理を分岐する方法をメモとして掲載しておきます。

ショートコードで何かの動作をさせるシーンにおいて、ショートコードがなかったら特定のスクリプトやCSSの読み込みをしないといったページパフォーマンスの改善策として使えると思います。

例として、本文内に〇〇〇というショートコードがあるかないかを判断し、

  • ショートコードがあれば、本文先頭に「ショートコードが動作しています」という文字列を表示
  • ショートコードがなければ、本文先頭に「ショートコードは存在しません」という文字列を表示

するような動作をさせるコードを紹介します。

以下のコードをテーマ(子テーマ)のfunctions.phpへコードを追記し、〇〇〇となっている箇所を実際のショートコードに変更してから保存することで動作します。

/***** ショートコードの有無により、本文冒頭に文字列表示 *****/
function hab_has_sc_function($content){
global $post;
// [〇〇〇] というショートコードが含まれているか
if( is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, '〇〇〇' ) ) {
	// ショートコードがある場合の処理
	$find_shortcode = 'ショートコードが動作しています';
	return $find_shortcode . $content;
}else{
	// ショートコードがない場合の処理
	$no_shortcode = 'ショートコードは存在しません';
	return $no_shortcode . $content;
}
}
add_filter('the_content','hab_has_sc_function');

ここで使われている判別関数「has_shortcode」はあまり使われていないので私も知りませんでした。

実際にテストしてみたところ、has_shortcoe関数は、ショートコードがあるかどうかという判別ではなく、実際に動作するショートコードが存在しているかを判別するものですので、何かのプラグインのショートコードに対する判別をしている場合で、プラグインを停止した場合の判別結果は「false」となり、思わぬ結果となることがありますので注意しましょう。


と紹介しましたが、恐らくこの関数を使うケースは、ショートコードの有無によって、裏側でスクリプトやCSSを読み込むなどの処理をさせる目的が多いでしょう。その場合はWordPress公式のコードリファレンスに掲載されているサンプルコードを参考に機能実装するとよいでしょう。

作者:

WordPress用テーマ「ha-Basic」「HABONE」の開発、プラグインやテーマの翻訳、WordPressの使い方やカスタマイズ方法などの情報を配信しています。

年齢:40代 趣味/園芸・ペット・卓球