it-swarm.com.de

Benutzerdefiniertes Permalink-Tag unterbricht die Paginierung

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

  1. Mache ich das Permalink-Tag richtig? Gibt es eine bessere/einfachere Möglichkeit?
  2. Wie kann ich die Paginierung beheben und die oben beschriebene Permalink-Struktur beibehalten?
2
Howdy_McGee

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.

  1. Der rewrite_rules_array-Hook wurde vollständig entfernt
  2. Verschob meine Taxonomie-Registrierung über meine Post-Typ-Registrierung
  3. Die Taxonomie wurde so geändert, dass sie nicht hierarchisch ist. '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.

2
Howdy_McGee