Die meisten der folgenden Arbeiten stammen aus einer vorherigen Frage/akzeptierten Antwort . Ich versuche die folgende Permalink-Struktur zu erreichen:
/listings/
/listings/page/2/
/listings/%state%/
/listings/%state%/page/2/
/listings/%state%/property/post-title/
Ich dachte, dass es eine einfache Aufgabe sein würde, aber ich stoße immer mehr auf Probleme. Derzeit funktionieren alle oben genannten Funktionen mit Ausnahme der Paginierung .
Mein Beitragstyp (cpt_listings
) sieht so aus:
'rewrite' => array( 'slug' => 'listings/%tax_states%/property', 'with_front' => false )
Meine Taxonomie (tax_states
) sieht so aus:
'rewrite' => array( 'slug' => 'listings', 'with_front' => false, 'hierarchical' => true )
Ich benutze diese Funktion, um %state%
durch den aktuellen Taxonomiebegriff zu ersetzen:
/** Process the State Taxonomy Permalink Tag **/
function state_permalink( $permalink, $post_id, $leavename ) {
if( false === strpos( $permalink, '%tax_states%' ) ) {
return $permalink;
}
// Get post
$post = get_post( $post_id );
if( empty( $post ) ) {
return $permalink;
}
// Get taxonomy terms
$terms = wp_get_object_terms( $post->ID, 'tax_states' );
if( ! is_wp_error( $terms ) && ! empty( $terms ) && is_object( $terms[0] ) ) {
$taxonomy_slug = $terms[0]->slug;
} else {
$taxonomy_slug = 'united-states';
}
return str_replace( '%tax_states%', $taxonomy_slug, $permalink );
}
add_filter('post_link', 'state_permalink', 10, 3);
add_filter('post_type_link', 'state_permalink', 10, 3);
Schließlich habe ich diese benutzerdefinierten Änderungen vorgenommen:
/** Rewrites to allow our permalinks to work **/
/** This fixes `/listings/%tax_states%/` **/
/** This fixes `listings/%tax_states%/property/post-title/` **/
function type_tax_rewrites( $rules ) {
$new = array();
$new['listings/([^/]+)/property/(.+)/?$'] = 'index.php?cpt_listings=$matches[2]';
$new['listings/(.+)/?$'] = 'index.php?tax_states=$matches[1]';
return array_merge( $new, $rules ); // Ensure our rules come first
}
add_filter( 'rewrite_rules_array', 'type_tax_rewrites' );
Da all das außer der Paginierung funktioniert, habe ich das Gefühl, dass ich hier etwas falsch mache. Ich habe fast das Gefühl, dass WordPress die Umschreibungen übernehmen sollte und ich nicht jedes Szenario neu schreiben müsste.
Ich habe meinen $wp_query
in einem template_redirect
-Hook ausgedruckt, um zu sehen, was die Abfragevariablen sind.
[tax_states] => 2,
[paged] => 0,
Also nimmt tax_states
die ausgelagerte Variable und ich habe damit herumgespielt, sie umzuschreiben, aber ich bin nicht mit der Funktionsweise des Umschreibesystems vertraut, und wie ich oben angegeben habe, scheint es nur so, als ob ich etwas falsch mache, wenn ich es überhaupt muss zur Paginierung umschreiben. Hier sind die Umschreibekombinationen, die ich an den obigen rewrite_rules_array
-Hook angehängt habe:
$new['listings/page/([0-9]+)/?$'] = 'index.php?paged=$matches[1]';
$new['listings/page/([0-9]+)/?$'] = 'index.php?tax_states=$matches[1]';
Keiner der oben genannten scheint etwas anderes zu tun, die Paginierung führt immer noch zu 404s.
Der Kern meiner Frage ist
Dank Milos Hilfe funktionierte der Code in der Frage: Permalinks wurden repariert und die Struktur blieb genau so, wie ich es in der obigen Frage beschrieben haben wollte.
rewrite_rules_array
-Hook wurde vollständig entfernt'hierarchical' => false
Aufgrund meines begrenzten Verständnisses, wie es funktioniert, basierend auf dem, was Milo beschrieben hat, ist, dass die integrierten WordPress-Umschreibungen, die hierarchische Taxonomien handhaben, die Struktur beeinträchtigen, die ich erreichen wollte, ich kann nur aufgrund von /parent-term/child-term/
-Umschreibungen annehmen. Die eingebaute tag
erreicht bereits die Struktur, für die ich mich entschieden habe, weshalb nicht hierarchische Strukturen funktionieren.