それは良い質問です。ハッキングせずに現在は不可能だと思います。これが私のやり方です:
<?php
function my_override_shortcodes() {
global $shortcode_tags, $_shortcode_tags;
// Let's make a back-up of the shortcodes
$_shortcode_tags = $shortcode_tags;
// Add any shortcode tags that we shouldn't touch here
$disabled_tags = array( 'gallery' );
foreach ( $shortcode_tags as $tag => $cb ) {
if ( in_array( $tag, $disabled_tags ) ) {
continue;
}
// Overwrite the callback function
$shortcode_tags[ $tag ] = 'my_wrap_shortcode_in_div';
}
}
add_action( 'init', 'my_override_shortcodes', 9999 );
// Wrap the output of a shortcode in a div with class "i-wrap-you"
// The original callback is called from the $_shortcode_tags array
function my_wrap_shortcode_in_div( $attr, $content = null, $tag ) {
global $_shortcode_tags;
return '<div class="i-wrap-you">' . call_user_func( $_shortcode_tags[ $tag ], $attr, $content, $tag ) . '</div>';
}
ここで何が起こるかというとinit
、登録されたすべてのショートコードをコピーし、それらのコールバック関数を独自の関数で上書きします。
一方、その関数が呼び出されると、開始 div タグが返され、その後に元のコールバック関数の出力が返され、その後に終了 div タグが返されます。
その呼び出しのためだけにショートコードをオーバーライドしたい場合は、次のdo_shortcode
ようにすることができます:
function my_restore_shortcodes() {
global $shortcode_tags, $_shortcode_tags;
// Restore the original callbacks
if ( isset( $_shortcode_tags ) ) {
$shortcode_tags = $_shortcode_tags;
}
}
そして、あなたのコードでこれを行います:
$sidebarBlocks = get_post_meta( $post->ID, "page_sidebarhubspot", true );
my_override_shortcodes();
echo do_shortcode('<div>'.$sidebarBlocks.'</div>');
my_restore_shortcodes();
もちろん、2番目の方法を使用する場合は、行を削除することを忘れないでください
add_action( 'init', 'my_override_shortcodes', 10 );
関数のボーナスとして、my_override_shortcodes()
上書きされないショートコード ($disabled_tags
配列) を指定できます。