WordPressでショートコード展開後に記事本文を置換する方法

WordPressでショートコード展開後に記事本文を置換する方法

Photo Denin Williams via Unsplash

WordPressでショートコード展開後に記事本文を置換する方法を紹介します。

WordPressで投稿本文のコンテンツを置換したいときは、add_filter()関数を使ってthe_contentにフックさせます。

functions.phpに下記のコードを記述します。

function change_the_content($the_content) {
  $the_content = str_replace('aaa','bbb',$the_content); //HTML出力で置き換える処理
  return $the_content;
}
add_filter('the_content', 'change_the_content');

しかし、これでは、ショートコード実行前の状態のコンテンツに対して処理を行うことになり、ショートコード展開後のコンテンツを置換したいときに使えません。

ショートコード展開後のコンテンツを置換するときは、add_filter()の第3パラメーターのpriority(関数を実行する順序)を指定します。priorityのデフォルト値は10になっています。

ショートコードを展開するフィルタの実行順序は11なので、それより後の12以上を指定することで、ショートコード展開後のコンテンツに対して、置換処理を実行することができます。

functions.phpに下記のコードを記述します。

function change_the_content($the_content) {
  $the_content = str_replace('aaa','bbb',$the_content); //HTML出力で置き換える処理
  return $the_content;
}
add_filter('the_content', 'change_the_content', 12);

これで、ショートコード展開後のコンテンツに対して置換処理を行うことができます。

投稿本文だけではなく、WordPressで出力されるページのコード全体に対して置換処理を行いたい場合は、こちらの記事を参考にしてください。