web-dev-qa-db-fra.com

Personnalisation Permalink Tag rompt pagination

La plupart des travaux ci-dessous proviennent d'une question précédente/réponse acceptée . J'essaie d'obtenir la structure permalien suivante:

/listings/
/listings/page/2/
/listings/%state%/
/listings/%state%/page/2/
/listings/%state%/property/post-title/

Je pensais que cela allait être une tâche simple, mais je continue à rencontrer de plus en plus de problèmes. Actuellement, tout ce qui précède fonctionne sauf la pagination .

Ma réécriture après le type (cpt_listings) ressemble à ceci:

'rewrite' => array( 'slug' => 'listings/%tax_states%/property', 'with_front' => false )

Ma taxonomie (tax_states) réécrit ressemble à ceci:

'rewrite' => array( 'slug' => 'listings', 'with_front' => false, 'hierarchical' => true )

J'utilise cette fonction pour remplacer %state% par le terme de taxonomie actuel:

/** 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);

Enfin, j'ai ces réécritures personnalisées en place:

/** 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' );

Étant donné que tout ce qui précède fonctionne en dehors de la pagination, j'ai l'impression de faire quelque chose de mal ici. J'ai presque l'impression que WordPress devrait gérer les réécritures et je n'aurais pas besoin de réécrire tous les scénarios.

J'ai imprimé mon $wp_query dans un crochet template_redirect pour voir quelles sont les variables de requête et celles qui restent:

[tax_states] => 2,
[paged]      => 0,

Donc, tax_states prend la variable paginée et je me suis amusée à la réécrire, mais je ne connais pas le fonctionnement du système de réécriture et, comme je l’ai dit plus haut, il me semble que je fais quelque chose de mal si je dois même réécrire pour la pagination. Voici les combinaisons de réécriture que j'ai ajoutées au hook rewrite_rules_array ci-dessus:

$new['listings/page/([0-9]+)/?$']  = 'index.php?paged=$matches[1]';
$new['listings/page/([0-9]+)/?$']  = 'index.php?tax_states=$matches[1]';

Aucune de ces réponses ne semble faire la différence, la pagination conduit toujours à 404.

Le cœur de ma question est

  1. Est-ce que je fais correctement la balise permalink? Y a-t-il un moyen meilleur/plus facile de le faire?
  2. Comment puis-je corriger la pagination et conserver la structure de permalien décrite ci-dessus?
2
Howdy_McGee

Grâce à l'aide de Milo, le code de la question a fini par fonctionner: permaliens fixés et la structure est restée exactement telle que je l'avais décrite dans la question ci-dessus.

  1. Suppression complète du hook rewrite_rules_array
  2. Déplacement de mon enregistrement de taxonomie au-dessus de mon enregistrement de type de message
  3. Modification de la taxonomie pour qu'elle soit non hiérarchique 'hierarchical' => false

D'après ma compréhension limitée du fonctionnement de ce dernier, Milo décrivait que les réécritures WordPress intégrées qui gèrent les taxonomies hiérarchiques interfèrent avec la structure que j'essayais de réaliser. Je ne peux que supposer à cause des réécritures /parent-term/child-term/. La variable tag intégrée correspond déjà à la structure que je cherchais, raison pour laquelle les systèmes non hiérarchiques finissent par fonctionner.

2
Howdy_McGee