web-dev-qa-db-ja.com

複数の分類法を書き換えたアーカイブページ

わかりました、私はこの質問に対するほとんどすべての答えを読み終えました、しかし私の状況はどういうわけかユニークでなければなりません。

私がやろうとしていることは理論的には簡単です。

  • CPT:リソース
  • 税1:リソースタイプ
  • 税2:産業

CPTを登録するときに、次のように設定しました。

'rewrite' => array(
        'slug' => 'resources/%resource_type%',
        'with_front' => false
    ),

標準投稿はベースを使用しているので'with_front' => false

example.com/resourcesのテンプレートを含むpage-resources.phpのページもあります。

Tax1を登録するときに、次のように設定しました。

'rewrite'  => array( 
        'slug' => 'resources',
        'with_front' => false
    )

resource_typeというwhite-papersという用語があります。

これは私がexample.com/resources/white-papers/を使った分類アーカイブページのためのtaxonomy-resource_type.phpのようなパーマリンクの最初の望ましい結果を生み出します。

これが、物事が巧妙になるところです。私がやろうとしているのは、2つ目の分類法(Tax2)を追加し、次のパーマリンクを持つ別のアーカイブページを作成することです。

example.com/resources/white-papers/enterprise

このアーカイブは、resource_type = white-papersおよびindustry = enterpriseの投稿のみを表示するという点で、フィルタ処理された種類のアーカイブです。

代わりに私は404を得ます。

しかし、もし私がexample.com/index.php?post_type=resource&resource_type=white-papers&industry=enterpriseのクエリーでURLを試みるならば、私は私の希望のフィルターされたアーカイブページを得ます。

また、問題に関連しているかどうかはわかりませんが、この機能を実行しています。

function resources_cpt_generating_rule($wp_rewrite) {
  $rules = array();
  $terms = get_terms( array(
    'taxonomy' => 'resource_type',
    'hide_empty' => false,
  ) );

$post_type = 'resource';
foreach ($terms as $term) {    

    $rules['resources/' . $term->slug . '/([^/]*)$'] = 'index.php?post_type=' . $post_type. '&resource_type=$matches[1]&name=$matches[1]';

}
// merge with global rules
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'resources_cpt_generating_rule');

私が助けを必要としているのは、これを達成するための書き換え規則です。

任意の助けは大いに前もって高く評価されています!

3
jedifunk

それで、私は私が戻ってきて、それが他の誰かに役立つならば私自身の質問に答えたいと思った。

はじめに、CPT:

'query_var' => true,
    'has_archive' => false,
    'rewrite' => array(
        'slug' => 'resources',
        'with_front' => false
    ),

税1:

'query_vars' => true,
    'rewrite' => array( 
        'slug' => 'resources/type',
        'with_front' => false
    )

税2:

'query_vars' => true,
'rewrite' => array(
        'with_front' => false
    )

書き換え:

add_rewrite_rule( '^resources/type/([^/]*)/industry/([^/]*)/?$', 'index.php?post_type=resources&resource_type=$matches[1]&industry=$matches[2]', 'top' );

これは私が最初に意図したものとはわずかに異なるURL構造を生成します、そしてそれはもう少し冗長ですが、私はそれが同様に機能すると思います。

example.com/resources = page-resources.php

Tax1用語example.com/resources/type/white-paperstaxonomy-resource_type.php = white-papers

example.com/resources/type/white-papers/industry/enterprise =同じtaxonomy-resource_type.phpアーカイブテンプレート。ただし、Tax1とTax2のCPT結果のみを表示します。

これはまさに私が達成したいと思っていた機能です。

3
jedifunk