web-dev-qa-db-ja.com

1つのカスタム分類法に対して複数の用語を含む高度な分類法クエリのURLパラメータを渡す方法

この回答 は、タクソノミー用語に対してORの一致を返すクエリのコードを提供します。

 global $ query_string; 
 $ args ['tax_query'] =配列(
 array(
 '分類法' => 'status' 
、 'terms' => array( 'available'、 'pending')// 2番目のクエリで "sold"に変更
、 'field' => 'slug' 
)、
); 

単一の用語の場合と同じように、分類テンプレートを使用してURLから配列の用語値(、 'terms' => array( 'available'、 'pending'))を取得します。

重要なのは、関心のある特定の組み合わせに対してページテンプレートをハードコードしなくても、分類用語を時間の経過とともに変更できるようにすることです。そのため、より良い方法がある場合はそれを提案してください。

おかげで この記事 私は次のようにテンプレートファイルへのパーマリンクマッピングを持っています:

 example.com/cptslugsは私のarchive-cptname.phpテンプレートにマップします。 
 example.com/cptslug/cpt-postは私のsingle-cptname.phpテンプレートにマップします。 
 example.com/cptslugs/ctxslug/termは私のtaxonomy-ctxname.phpテンプレートに対応しています。 

私は何かが欲しいのですが:

example.com/cptslugs/ctxslug/term1/term2/

get_query_var( 'term')がURLから用語の配列(term1、term2)を返すように、taxonomy-ctxname.phpテンプレートにマッピングします。

しかし私が得ることができれば

example.com/cptslugs/ctxslug/?terms=term1,term2

get_query_var( 'term')がURLから項の配列(term1、term2)を返すように、おそらく書き換えルールとフィルタを介して、taxonomy-ctxname.phpテンプレートにマッピングします。これも問題ありません。

しかし、どちらにしても、テンプレートファイルは1つの用語を渡すか、一連の用語を渡すかにかかわらず動作するはずです。

UPDATE

わかりました - @scribuが助けに! - 多分。検索を続けて、これが私が見つけたものです。私はそれをすべて考え出したと思いました、しかし私はそれを働かせることができません。

?tax 1 = term 1、term 2&tax 2 = term 2 + term 3 

にマップします。

 query_posts(配列([.____。 '' tax 1 '=>' term 1、term 2 '、
' tax 2 '=>' term 3 + term 4 '
)); 

これはさらに次のものにマッピングされます。

 query_posts(array(
 'tax_query' => array(
 array(
 '分類法' => 'tax1'、
 'field') => 'slug'、
 'terms' =>配列( 'term1'、 'term2')、
 'operator' => 'OR' 
)、[.____ 。[array(
 'taxonomy' => 'tax2'、
 'field' => 'slug'、
 'terms' => array( 'term3'、 'term4 ')、
'演算子 '=>' AND '
)、
)); 

example.com/?ctxname=term1,term2

フロントページのテンプレートをレンダリングします。 改訂:ctxnameのスペルが正しい場合はtaxonomy-ctxname.phpをレンダリングします。それをイメージングすること!

example.com/?cptslug/ctxslug=term1,term2

(分類法はcptslug/ctxslugのスラッグで登録されています)また、フロントページのテンプレートをレンダリングします。

example.com/cptslug/?ctxslug=term1+term2

archive-ctpname.phpテンプレートをレンダリングします。

Taxonomy-ctxname.phpまたはtaxonomy.phpテンプレートを表示するURLを取得する方法

それから、私がそれを得たら、かわいいURLの提案は大歓迎ですが絶対に必要というわけではありません。

UPDATE TWO

example.com/?ctxname=term1,term2

そして

example.com/ctpslugs/ctxslug/term1,term2/

両方ともtaxonomy-ctxname.phpを必要に応じてレンダリングします。以下に掲載されている私の回答の詳細を見てください。

5
marfarma

追加後

 print_r($ wp_query); 

私のテンプレートと結果を調べると、機能するURL形式が見つかりました。私の質問で、カスタム分類名を正しくつづると、次の形式が機能しないこと、実際には機能することを書きました。

example.com/?ctxname=term1+term2

「+」および「、」演算子(それぞれANDおよびORを示す)を含むきれいなURLは、notURL-エンコードされました。

example.com/cptslugs/ctxslug/term1,term2/ 

次のWP_Tax_Queryオブジェクトを生成します

 [tax_query] => WP_Tax_Queryオブジェクト
(
 [クエリ] =>配列
(
 [0] =>配列
(
 [分類] => announcements_cats 
 [terms] =>配列
(
 [0] => term1 
 [1] = > term2 
)
 
 [include_children] => 1 
 [field] => slug 
 [operator] => IN 
)
 
 [1] => Array 
(
 [taxonomy] => category 
 [terms] => Array 
 ](
 [0] => 1 
)
 
 [include_children] => 
 [field] => term_id 
 [operator] => NOT IN 
)
 
 )
 
 [関係] => AND 
)

ながら

example.com/cptslugs/ctxslug/term1+term2/

次のWP_Tax_Queryオブジェクトを生成します

 [tax_query] => WP_Tax_Queryオブジェクト
(
 [クエリ] =>配列
(
 [0] =>配列
(
 [分類] => ctxname 
 [terms] =>配列
(
 [0] => term1 
)
 
 [include_children] => 1 
 [field] => slug 
 [operator] => IN 
)
 
 [1] => Array 
(
 [taxonomy] => ctxname 
 [terms] => Array 
(
 [0] = > term2 
)
 
 [include_children] => 1 [.__ __。] [field] => slug 
 [operator] => IN 
)
 
 [2] => Array 
(
 [分類] =>カテゴリ
 [用語] =>配列
(
 [0] => 1 
)
 
 [include_children] => 
 [field] => term_id 
 [operator] => NOT IN 
)
 
)
 
 [関係] => AND 
)

PS: これ: は「+」と「、」は「予約文字」であり、URIのパス、パラメーター、フラグメントで使用できますが、他の部分には表示されない場合がありますURI。結局は大丈夫だと思います。しかし、どういうわけか「間違っている」ようです。

4
marfarma