ショートコードは、ユーザーが作成したコードをWordPressエディタ上で呼び出すための機能です。任意のHTMLデータを出力するときによく使われます。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でショートコードの引数に配列を渡す方法を紹介しました。ショートコードの使い方・書き方については下記記事を参考にしてください。