WordPress ショートコードの引数に配列を使う方法
WordPress のショートコードは、引数を使って任意の値を渡せる仕組みが用意されています。
[shortcode name="value"]
ただし、1つの引数に対して渡せる値は1つだけ。そして配列のような特殊な型には対応していません。つまり PHP では定義されている array 型を、ショートコードの引数に利用できないということ。では配列型を利用したい場合はどうすればいいのか?最初からたくさんの引数を用意しておかないといけないのか?
答えは単純で、explode 関数を使えば簡単に処理できます。
ショートコードの引数に配列を使う
サンプルプログラム
大まかな流れは、カンマ区切りで引数を渡して、ショートコードを処理するタイミングで配列化して処理を進めます。
[test_sc ar="abc,123,あいう,***"]
ショートコードを処理するプログラム例はこちら。配列の数だけ処理を繰り返すサンプルです。
function test_scode( $atts ) { extract(shortcode_atts(array( 'ar'=>'' ),$atts)); if( isset( $ar )) { // カンマで分割 $testArray = explode( ',', $ar ); } // 配列のサイズ分 処理を繰り返す foreach( $testArray as $ta ) { ・・・ } ・・・ } add_shortcode( "test_sc", "test_scode" );
explode 関数について
explode ( string $separator , string $string , int $limit = PHP_INT_MAX )
文字列をセパレーターで分割して配列化する関数です。今回は CSV のテキストデータを登録する場合など、一般的に用いられる頻度の高いカンマ (,) を区切り文字として利用しました。
データの都合上どうしてもカンマを使うのであれば、他の文字をセパレーターに指定しても大丈夫です。スペースやタブ区切りにする方法もあります。上級者のやり方になると、ダブルクォーテーションで囲ってカンマ区切りにするなど、ひと工夫して対応します。
ダブルクォーテーションのカンマ区切りの場合、引数で渡された文字列の先頭と末尾の文字を取り除いて、セパレーターを "," の3文字で指定すれば explode 関数で配列化できます。
あとは各自の環境に合わせてアレンジしてみてください。