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

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

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

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

PHP

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

Q&A

解決済

1回答

2852閲覧

WordPressの「get_terms」で複数条件を組み合わせたい

chikachi

総合スコア33

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/06/11 08:33

編集2019/06/11 08:37

###前提・実現したいこと
次のような「noun」「adjective」というタクソノミーがあり、それぞれに親として「ja」「en」というタームがあります。

noun(タクソノミー)
|─ ja(親ターム)
|─ en(親ターム)

adjective(タクソノミー)
|─ ja(親ターム)
|─ en(親ターム)

そしてこの親の中に、色々な子タームがあるのですが、その子タームを次の3つを組み合わせて取得したいです。

➀「noun」の、「en」の子ターム
➁「noun」の、「ja」の子ターム
➂「adjective」の、「ja」の子ターム

###試したこと
手間ですがいちいちすべてを書いたらできるかもと思い、下記のように3回にわけて取得してみたのですが、最後にarray_marge ができないようでした。

「// ここで連結できなかった」という部分です。

PHP

1//----------------------------------------------------- 2// 目的の子タームを➀➁➂に分けて取得 3//----------------------------------------------------- 4 5// ➀ 「noun」の、「en」の子ターム 6$en_term = get_term_by( 'slug', 'en', 'noun' ); 7$en_noun_id = $en_term->term_id; 8$noun_en = array( 9 'hide_empty' => true, // 空も出す 10 'child_of' => $en_noun_id, // この子を取得したい 11); 12$noun_en_array = get_terms( 'noun', $noun_en ); 13 14// ➁「noun」の、「ja」の子ターム 15$ja_term = get_term_by( 'slug', 'ja', 'noun' ); 16$ja_noun_id = $ja_term->term_id; 17$noun_ja = array( 18 'hide_empty' => true, // 空も出す 19 'child_of' => $ja_noun_id, // この子を取得したい 20); 21$noun_ja_array = get_terms( 'noun', $noun_ja ); 22 23// ➂「adjective」の、「ja」の子ターム 24$ja_adjective = get_term_by( 'slug', 'ja', 'adjective' ); 25$ja_adjective_id = $ja_adjective->term_id; 26$adjective_ja = array( 27 'hide_empty' => true, // 空も出す 28 'child_of' => $ja_adjective_id, // この子を取得したい 29); 30$adjective_ja_array = get_terms( 'adjective', $adjective_ja ); 31 32// ここで連結できなかった 33$merge_array = array_merge( $noun_en_array, $noun_ja_array, $adjective_ja_array );

なお、最終的には下記のようにして出力する予定です。

PHP

1//----------------------------------------------------- 2// 取得できた子タームを出力 3//----------------------------------------------------- 4 5// $merge_arrayに上の➀➁➂が実現できたと仮定し、IDとdescriptionだけにする 6$terms_array = []; 7foreach( $merge_array as $term ) : 8 $num = count( $terms_array ); 9 $terms_array[$num]['id'] = $term->term_id; 10 $terms_array[$num]['description'] = unserialize( $term->description ); 11endforeach; 12 13// 出力 14var_dump( $terms_array );

そこで、どうすれば上の3つの条件で取得できるかをお伺いしたいです。

あと、上のようにいちいち3回に分けて書かなくても済むような、例えば「get_terms」の第二引数で巧く指定する方法などございましたら教えて頂ければ幸いです。

どうぞ宜しくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/06/11 10:44

「ここで連結できなかった」とはどのようになったのでしょうか。質問文に追記していただけますか。
chikachi

2019/06/11 11:03

あれっ?申し訳ございません。勘違いだったみたいで、質問のコードでできてました。失礼致しました。ついでといってはなんですが、もっと良い書き方などございませんでしょうか?なんだか同じことを繰り返し書いていて初心者ながら違和感があります。
guest

回答1

0

ベストアンサー

あと、上のようにいちいち3回に分けて書かなくても済むような、例えば「get_terms」の第二引数で巧く指定する方法などございましたら教えて頂ければ幸いです。

カスタムタクソノミーのタームには「説明」という項目がありますが(親のタームを選ぶセレクトボックスの下に入力欄があります)、もしこの欄を利用していないのであれば、対象となる

➀「noun」の、「en」の子ターム
➁「noun」の、「ja」の子ターム
➂「adjective」の、「ja」の子ターム

のすべてについて、「説明」欄にこの対象グループを特定できる共通のワード(例えば target)を入れておくと、get_terms の引数で 'description__like' を指定することでまとめて取得することが可能です。

php

1<?php 2 3$taxonomies = array( 4 'noun', 5 'adjective', 6); 7$args = array( 8 'taxonomy' => $taxonomies, 9 'hide_empty' => false, 10 'description__like' => 'target', 11); 12$terms = get_terms( $args );

投稿2019/06/14 13:47

編集2019/06/15 02:51
YukiYamashina

総合スコア1011

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

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

chikachi

2019/06/16 04:26

すみません確認遅れました。良いアイディアありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問