WordPressのナビゲーションブロックでは、通常ショートコードは実行されず、ショートコードのまま表示されるようになっていますが、ナビゲーションブロック内に設置した固定ページリンクのタイトルとリンクをショートコードにした上で以下のコードをfunctions.phpへ追加することで、ショートコードを実行させることができるようになります。
/*** ナビゲーションブロック内にある固定ページリンクをショートコードの実行命令と置き換える ***/
function pwcn_do_shortcode_render_menu_block($block_content, $block){
//ブロック名と固定ページのリンクが同じかどうかで条件分岐
if (isset($block['blockName']) && 'core/navigation-link' === $block['blockName']) {
//リンクが [sample-shortcode]という文字列であればショートコードを再実行
if (strpos($block_content, ' [sample-shortcode]') !== false) {
$shortcode = do_shortcode(' [sample-shortcode]');
return $shortcode;
}
}
return $block_content;
}
add_filter('render_block', 'pwcn_do_shortcode_render_menu_block', 10, 2);
コード内にコメントを入れているのでお分かりかと思いますが、上記のコードでは「sample-shortcode」という名前のショートコードが固定ページリンクブロック(core/navigation-link)の名前とリンク先に共通して存在するブロックを見つけ、存在すればrender_blockへフックさせて再実行させる(今回の場合はdo_shortcode()関数を使ってショートコードを再実行させる)という処理をするもので、コード内の「sample-shortcode」を実行させたいショートコード名に変えれば動作します。
別のユーザー定義関数で複製してショートコード名を変えるか、if(isset…{}の部分を複製して、Sshortcode変数を変えれば、メニュー内で複数のショートコードを実行させることもできます。













コメントを残す