cocoonフック調査~get_the_content_all_scriptsの使い方と活用例

タナビーの高梨です。
WordPressのテーマ「Cocoon」には、テーマ改変なしでデザインや動作を拡張できる豊富なアクション・フィルターフックが用意されています。
分かる範囲で内容を調査したのでブログにまとめていこうと思います。
今回は本文中のscript出力を操作をしているロジックを実行するかしないかを変更できるフィルターフック
👉get_the_content_all_scripts
です
フックの概要
フック名 | 発火タイミング |
---|---|
get_the_content_all_scripts | 本文データ展開時(’the_content’フィルター) |
発火条件
the_contentのフィルターフック発火時に発火すると見せかけて、下記の理由により絶対に発火しないと思われます。
発火しない理由
apply_filters()がコールされている箇所は下記のような内容になっています。
if (is_footer_javascript_enable() &&
apply_filters('get_the_content_all_scripts', true) &&
preg_match_all('{<script.*?>(.*?)</script>}is', $the_content, $m)) {
このうち、is_footer_javascript_enable()は以下の通りに定義されています。
function is_footer_javascript_enable(){
return false;//get_theme_option(OP_FOOTER_JAVASCRIPT_ENABLE, 1);
}
is_footer_javascript_enable()が必ずfalseで返るため、apply_filters()がコールされるに至りません。
apply_filters呼び出し元のソースコード
lib/content.php
if (is_footer_javascript_enable() &&
apply_filters('get_the_content_all_scripts', true) &&
preg_match_all('{<script.*?>(.*?)</script>}is', $the_content, $m)) {
~~~~~~~~~~~~~~~~~~~~~~~~~~
}
引数
$get_the_content_all_scripts:(boolean)true:scriptを展開する、false:scriptを展開しない
カスタマイズコード例
強制的にscriptを展開しない場合の例ですが、おそらく絶対に実行されません。
function customize_get_the_content_all_scripts ( $get_the_content_all_scripts ) {
return false;
}
add_filter('get_the_content_all_scripts', 'customize_get_the_content_all_scripts');
注意点
・Cocoon標準のままでは 必ず実行されないフィルターフック です
・他テーマやCocoonの将来バージョンで is_footer_javascript_enable() の返り値が変われば利用できる可能性があります。
・現状では「存在するが死んでいるフック」と理解しておくのが無難です
まとめ
・get_the_content_all_scripts は本文内の<script>タグ展開を制御するためのフィルター
・ただし Cocoon の現行コードでは条件分岐により 発火しない仕様
・実際のカスタマイズ用途はなく、将来的な変更に備えて存在している可能性が高い