コーダーのKです。
今回は忘備録としてショートコードの自作について残します。
先に断っておきますが、探せば出てくるようなことばかりです。参考にさせて頂いた皆様に感謝を。
では、まずショートコードを利用できるようにfunctions.phpに下記を記述します。
ショートコード追加は下記の"add_shortcode"を利用します。
add_shortcode('my_text', 'my_text_add'); function my_text_add() { echo 'sample text'; }
あとは任意の位置に<?php echo do_shortcode('[my_text]'); ?>と記述してやれば、my_text_addが動く仕組みですね。
試しにheader.phpやsidebar.phpに記述してみましたが、問題なしです。
投稿に利用する場合はコンテンツエディターに直接[my_text]と書けばいいとのこと。
他のプラグインなどでもそうしていますしね(※1)。
※1 投稿へのショートコード追加
が、これ罠です。
記事を確認すると下図(※2)になってしまう。
※2 実行結果1
this is test for "short code".より上に「sample text」が出てきていますね。
うーん……原因を探してGoogle先生に聞いてもよくわからなかった。
だったら他のソースを参考にすればいいかな? という事でショートコードで記事一覧を出す、などなど色々調べた結果、、、
みんなreturnしてる。よくわからんがとりあえずreturnしてみる。
add_shortcode('my_text', 'my_text_add'); function my_text_add() { return 'sample text'; }
こんなんでええんかな・・・
※3 実行結果2
・・・おお、ちゃんと任意の位置に「sample text」が出た。
■原因
wp_content()で出力される際の読み込みのタイミングとのこと、、、echoだとどうも先に処理されるようです。
header.phpなどはwp_content()を通らないから関係がないって話だそうです。
なのでreturnにしておくと、ショートコードのある位置に文字列が返される結果になる。
あと、ショートコードの優先順位は’11’よってautopなどのフィルターより優先度が低いので、自動でpタグに囲われたりする。
どこかにショートコードがpタグで囲われないようにするfunction書かないとダメかな?
■所感
こんな初歩的なこともわからないなんちゃってコーダーなのですが、色々探せば救いの手はあちらこちらにあります。
そうやって技術の共有をしてくれる善意に縋る・・・だけだと勿体ないですし、誰かの一助になれれば幸いです。