add_shortcode

Wordpress
雑記

WordPressにて、 [test_shortcode key=”100″] という感じのショートコードを作りたいとして、手始めにシンプルに以下の感じで functions.php (またはプラグイン側)に書いて、

add_shortcode( 'test_shortcode', 'test_shortcode_func' );
function test_shortcode_func( $atts, $content='' ) {
	var_dump($atts['key']);
	return false;
}

フロント側の固定ページにて var_dump してkeyを取得できているか確認してみようとしたわけです。

まずは、上の感じで、管理画面で固定ページの新規追加して Block editor の「ショートコードブロック」に入力して登録。

その後、リロードしてみると、管理画面上でvar_dumpで文字列がぴょっと表示されるんですよね。

なんでだろう?と思ってChatGPTに聞くと、

WordPressのショートコードがブロックエディターの管理画面でも動作してしまう事例は、一般的にはあまり言及されていません。しかし、あなたが経験している現象は、Gutenberg(ブロックエディター)でのショートコードブロックの動作と関係している可能性があります。ブロックエディターは、エディター内で動的なコンテンツをプレビューとして表示する設計になっているため、管理画面でもショートコードが実行されることがあります。

との事。「実行されることがある」というが、動くと思って良いですよね。
つまり「do_shortcode」でショートコードを実行した状態になるという。。

「段落」ブロックに書いても「ショートコード」ブロックに書いても、動いている様でした。
その解決策としては、やはり「is_admin()」を使って管理画面なのかフロントなのかで処理を分けるという事だと思われる。単純な物だと

add_shortcode( 'test_shortcode', 'test_shortcode_func' );
function test_shortcode_func( $atts, $content='' ) {
    if ( is_admin() ) {
        return false;
    }
    var_dump($atts['key']);
    return false;
}

こんな感じだろうか?
これで管理画面では何も実行されなくなる。

うーん、旧ビジュアルエディタでショートコード書いたからといって管理画面で実行されるなんてこと無かったのでちょっと驚きました。

が、実際は、フロントと管理画面できちんと処理を分ける様に設計しておかないといけないという事ですね。