ブログの始め方・WordPress・レンタルサーバー

ショートコードの引数に配列を渡す方法 – 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の始め方と必要な基礎知識を解説します。具体的なブログの始め方と関連記事を一覧にまとめているので参考にしてください。
Read More