質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2662閲覧

WordPress ショートコードの引数にカテゴリー名とタグ

maonmyo

総合スコア36

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/07/14 11:23

編集2017/07/18 10:34

WordPressとPHPを最近始めたばかりですが、質問させてください。

ショートコードの第1引数にカテゴリー名を、第2引数にタグ名を指定し
さらに'post_type'カラムが'post'であるレコードリストを取得したいのですが

PHP

1function shortcode_list( $atts ) { 2 $atts = shortcode_atts( array( 3 'cat_name' => null, 4 'tag' => null, 5 ), $atts, 'list' ); 6 $args = array( 7 'post_type' => 'post', 8 'post_status' => 'publish', 9 'nopaging' => true, 10 'posts_per_page' => '-1', 11 ); 12 13$output = array(); 14 15 if ( isset( $atts['cat_name'] ) && ! empty( $atts['cat_name'] ) ) { 16 $args['category_name'] = preg_replace( '/[^\x01-\x7E]/', '', $atts['cat_name'] ); 17 } 18 19 if ( isset( $atts['tag'] ) && ! empty( $atts['tag'] ) ) { 20 $args['tag'] = preg_replace( '/[^\w\-,]/', '', $atts['tag'] ); 21 } 22 23 if ( isset( $atts['cat_name'] ) && isset( $atts['tag'] ) ) { 24 unset( $args['cat_name'] ); 25 } 26 27・・・ 28・・・ 29・・・ 30

自分でも調べましたが
そもそも'cat_name'がカテゴリー名ではなくスタック名のことらしいのですが
カテゴリーの表示名(日本語)では検索できないのでしょうか?

//こんな感じにしたい [list cat_name="赤,青",tag="Green"]

どなたかアドバイスいただけたら嬉しいです。


ご回答を受けて

以下のように直しました。

PHP

1function shortcode_list( $atts ) { 2 $atts = shortcode_atts( array( 3 'cat_name' => null, 4 'tag' => null, 5 ), $atts, 'list' ); 6 $args = array( 7 'post_type' => 'post', 8 'post_status' => 'publish', 9 'nopaging' => true, 10 'posts_per_page' => '-1', 11 'tax_query' => array( 12 'relation' => 'OR', 13 array( 14 'taxonomy' => 'category', 15 'field' => 'name', 16 'terms' => array($atts['cat_name']), 17 ), 18 ), 19 ); 20 21$output = array(); 22 23 if ( isset( $atts['cat_name'] ) && ! empty( $atts['cat_name'] ) ) { 24 $args['category_name'] = preg_replace( '/[^\x01-\x7E]/', '', $atts['cat_name'] ); 25 } 26 27 if ( isset( $atts['tag'] ) && ! empty( $atts['tag'] ) ) { 28 $args['tag'] = preg_replace( '/[^\w\-,]/', '', $atts['tag'] ); 29 } 30 31 if ( isset( $atts['cat_name'] ) && isset( $atts['tag'] ) ) { 32 unset( $args['cat_name'] ); 33 } 34 35・・・・ 36・・・ 37・・

'terms'の指定を

'terms' => array("赤","青","緑"),

とすると
引数をつけようがつけまいが、カテゴリ名が赤,青,緑のものが常に表示されます。
なので、

'terms' => array($atts['cat_name']),

としました。

これだと[カテゴリ名1つ + タグ複数] 指定で、想定通りの動きになります

[list cat_name="赤",tag="blue,Green"]

が、カテゴリ名を複数指定できません。
できない理由はわかるのですが、どうしたら改善できるのかがわかりません。

[list cat_name="赤,黒",tag="blue,Green"]

↑のようにそれぞれを複数指定した時に
カテゴリ赤のもの、黒のもの、タグがblueのもの,Greenのものが表示されるようにしたいので

'terms'の指定をどのように記述すれば複数の引数を渡すことができるでしょうか?
アドバイスよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

リファレンスを見る限り、カテゴリー名を直接指定できそうなパラメータはなさそうですが、tax_queryを使用すればいけそうな気配があります。

$args = array( 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'name', 'terms' => '赤', ), ), );

関数リファレンス/WP Query - WordPress Codex 日本語版 タクソノミーのパラメータ


追記

カンマ区切りの文字列("赤,青,緑")を配列(array("赤","青","緑"))にする方法がわからないということでしょうか?
であれば、PHPのexplode関数で変換をかければいいです。
PHP: explode - Manual

PHP

1$input = "赤,青,緑"; 2$output = explode(',', $input); 3var_dump($output); // デバッグ出力

投稿2017/07/17 01:51

編集2017/07/18 11:09
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maonmyo

2017/07/18 10:39

ご回答ありがとうございます。 参考にさせていただき、少し前進しました。 引き続きトライアンドエラーでやっていきます。 それと、一つ謝ります。 最初に「カテゴリ名とタグそれぞれを複数指定する」ということを書き損じていました。 すみません。 後出しになってしまって申し訳ありませんが、追記という形で改めて質問の方させていただきました。 ご助力いただけたらありがたいです。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問