ブログ初心者・Web制作の情報サイト
ショートコードの引数に配列を渡す方法 – WordPress

ショートコードの引数に配列を渡す方法 – WordPress

WordPressでショートコードの引数に配列を渡す方法の解説です。

以下のような人は参考にしてください。

  • ショートコードの引数に配列を渡したい
  • ショートコードの引数に投稿idの配列を渡したい
  • ショートコードでWordPressのループを使い指定した複数の記事を表示したい
  • 「カンマ」で区切るだけでは配列として扱えない!?

ショートコードで引数に配列を渡せたら便利ですよね。以下のように書ければ複数の投稿idをまとめて指定のキーに渡すことができます。

[shortcode_name post__in=1,2,3,4,5]

しかしこのまま渡しても配列にはならないので方法を紹介します。

ショートコードの引数に配列を渡す

ショートコードの引数に配列を渡す方法を解説します。

実際の方法はショートコードの引数に配列を書くわけではなく、引数を配列に変換して使用する疑似的なやり方です。

配列にしたい値を引数に渡す

WordPreessのエディタで使用するショートコードの記述です。

ここでは複数の投稿idを一つの配列として渡したいとします。

[shortcode_name post__in=1,2,3,4,5]

引数の値を配列に入れる

ショートコード側の処理の説明です。

//引数をまとめる
extract($atts = shortcode_atts(array(
   'post_type' => 'post',
   'post__in' => array(),
), $atts));

WordPreessでショートコードを使う際のおなじみの処理です。shortcode_atts() で引数とデフォルト値をまとめ、extract()で変数をインポートします。

この段階で $post__in には “1,2,3,4,5” という文字列が格納されています。

これを explode() で配列に変えます。

//投稿idを配列に変換
$post_ids = array();
if ($post__in && $post__in != 'all') {
   $post_ids = explode(',', $post__in);
}

$post_ids に配列が格納されました。後はこの値を使用して処理を行えばOKです。

引数で渡した値を explode() で配列に換えて変数に格納することで疑似的にですがショートコードの引数に配列を渡せるようになります。

ショートコードで指定した複数の記事を表示する

ここではショートコード内でサブループを使い指定した複数の記事を表示するサンプルコードを紹介します。

ショートコードの引数を配列として使用します。

[shortcode_name post__in=1,2,3,4,5]

配列の作成まではショートコードの引数に配列を渡すと同じなのでそちらを参考にしてください。

extract($atts = shortcode_atts(array(
   'post_type' => 'post',
   'post__in' => array(),
), $atts));

//投稿idを配列に変換
$post_ids = array();
if ($post__in && $post__in != array()) {
   $post_ids = explode(',', $post__in);
}

配列を連想配列にセットする

作成した配列を連想配列にセットします。連想配列とは「キー」と「値」をセットで書いた配列です。

連想配列:arry( ‘キー’ => ‘値’ )

//配列を連想配列にセット
$args = array(
   'post_type' => $post_type,
   'post__in' => $post_ids,
);

この例では ‘post__in’ に投稿idの配列を渡しています。’post__in’は指定された投稿のみ表示するパラメータです。

この後は$argsを元にWP_Queryのインスタンスを作成しループ処理を行えばOKです。

$my_query = new WP_Query($args);

//ループ処理

全体コード

投稿idで指定した複数の記事を表示する全体のコードです。ショートコードとして使用します。

add_shortcode('shortcode_name', function($atts) {
   extract($atts = shortcode_atts(array(
      'post_type' => 'post',
      'post__in' => array(),
   ), $atts));

   //投稿idを配列に変換
   $post_ids = array();
   if ($post__in && $post__in != array()) {
      $post_ids = explode(',', $post__in);
   }

   //引数配列をクエリの連想配列にセット
   $args = array(
      'post_type' => $post_type,
      'post__in' => $post_ids,
   );

   $my_query = new WP_Query($args);

   //ループ処理
   if ($my_query->have_posts()) {
      while ($my_query->have_posts() ) {
         $my_query->the_post();
         //処理内容
      }
   }
   //投稿データをリセット
   wp_reset_postdata();
});

最後に

WordPressでショートコードの引数に配列を渡す方法を紹介しました。ショートコードの使い方・書き方については下記記事を参考にしてください。

【WordPress】ショートコードの書き方と注意点
この記事ではWordPressでWebページを作成する際に便利なショートコードの書き方とその注意点を紹介します。自分独自の機能を実装しエディタで使用できればWebページ作成がとても楽になりますよ。