WordPress ショートコードの引数に配列を使う方法

公開日:
WordPress ショートコードの引数に配列を使う方法

WordPress のショートコードは、引数を使って任意の値を渡せる仕組みが用意されています。

[shortcode name="value"]

ただし、1つの引数に対して渡せる値は1つだけ。そして配列のような特殊な型には対応していません。つまり PHP では定義されている array 型を、ショートコードの引数に利用できないということ。では配列型を利用したい場合はどうすればいいのか?最初からたくさんの引数を用意しておかないといけないのか?

答えは単純で、explode 関数を使えば簡単に処理できます。

ショートコードの引数に配列を使う

サンプルプログラム

大まかな流れは、カンマ区切りで引数を渡して、ショートコードを処理するタイミングで配列化して処理を進めます。

WordPress 側の呼び出しコード
[test_sc ar="abc,123,あいう,***"]

ショートコードを処理するプログラム例はこちら。配列の数だけ処理を繰り返すサンプルです。

functions.php 処理内容
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 関数で配列化できます。

あとは各自の環境に合わせてアレンジしてみてください。

\ この記事をシェアする /

このブログの運営者

NJ

Web系メインで従事していた元システムエンジニア。現在は個人事業主として独立。Webサイト運営における「困った問題」の解決方法をブログで発信。Web サイト運営、ポップデザインや動画制作など、パソコンでモノづくりをしている。