Ok, ich habe so ziemlich jede Antwort auf diese Frage durchgelesen, aber meine Situation muss irgendwie einzigartig sein.
Was ich versuche zu tun, ist in der Theorie einfach.
Bei der Registrierung des CPT habe ich Folgendes eingestellt:
'rewrite' => array(
'slug' => 'resources/%resource_type%',
'with_front' => false
),
'with_front' => false
, da die Standardbeiträge eine Basis verwenden.
Ich habe auch eine Seite von example.com/resources
mit einer Vorlage von page-resources.php
.
Bei der Registrierung von Tax1 habe ich Folgendes festgelegt:
'rewrite' => array(
'slug' => 'resources',
'with_front' => false
)
Ich habe einen resource_type
Begriff namens white-papers
.
Dies erzeugt mein erstes gewünschtes Ergebnis eines Permalinks, der wie example.com/resources/white-papers/
für eine Taxonomie-Archivseite mit taxonomy-resource_type.php
aussieht.
Hier wird es schwierig. Was ich versuche, ist das Hinzufügen einer zweiten Taxonomie (Tax2) und das Erstellen einer weiteren Archivseite mit einem Permalink von:
example.com/resources/white-papers/enterprise
Dieses Archiv ist eine Art gefiltertes Archiv, in dem nur die Posts angezeigt werden sollen, die resource_type = white-papers
AND industry = enterprise
lauten.
Stattdessen bekomme ich 404
.
Wenn ich jedoch eine URL mit der Abfrage example.com/index.php?post_type=resource&resource_type=white-papers&industry=enterprise
versuche, erhalte ich meine gewünschte gefilterte Archivseite.
Auch und ich bin nicht sicher, ob es für das Problem relevant ist oder nicht, aber ich habe diese Funktion ausgeführt:
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');
Was ich brauche, ist die Umschreiberegeln, um dies zu erreichen.
Jede Hilfe wird im Voraus sehr geschätzt!
ok, also dachte ich, ich kehre zurück und beantworte meine eigene Frage, falls sie jemand anderem nützlich sein sollte.
Zum Starten des CPT:
'query_var' => true,
'has_archive' => false,
'rewrite' => array(
'slug' => 'resources',
'with_front' => false
),
Tax1:
'query_vars' => true,
'rewrite' => array(
'slug' => 'resources/type',
'with_front' => false
)
Tax2:
'query_vars' => true,
'rewrite' => array(
'with_front' => false
)
Die Umschreibungen:
add_rewrite_rule( '^resources/type/([^/]*)/industry/([^/]*)/?$', 'index.php?post_type=resources&resource_type=$matches[1]&industry=$matches[2]', 'top' );
Dies führt zu einer etwas anderen URL-Struktur als ursprünglich beabsichtigt, und obwohl sie etwas ausführlicher ist, funktioniert sie meiner Meinung nach genauso gut.
example.com/resources
= page-resources.php
example.com/resources/type/white-papers
= taxonomy-resource_type.php
für Steuer1 Begriff white-papers
.
example.com/resources/type/white-papers/industry/enterprise
= die gleiche taxonomy-resource_type.php
-Archivvorlage, liefert jedoch nur die CPT-Ergebnisse von Tax1 AND Tax2.
Genau diese Funktionalität wollte ich erreichen.