Cela ne devrait-il pas être facile?! Lien de type de message personnalisé / taxonomie personnalisée

10

Donc, cela me rend absolument fou. J'ai passé des jours à essayer de résoudre ce problème et je ne comprends pas pourquoi c'est si difficile, car il s'agit certainement d'une structure de permalien très commune!

J'ai parcouru des centaines de réponses et de messages et aucun ne semble résoudre le problème.

Je veux simplement cette structure:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

Je réalise donc ce qui suit:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

Chaque fois que j'essaie quelque chose, je reçois 404 erreurs ou la pagnination ne fonctionne pas.

Je ne comprends pas pourquoi c'est si difficile!

Toute aide vraiment appréciée!

Merci

============================================ ======= ================= INFORMATIONS SUPPLÉMENTAIRES =======================

Actuellement, j'enregistre le type de message et la taxonomie comme suit:

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

Si j'enregistre les deux en tant que "littérature", je reçois un 404 sur la page mysite.com/literature, mais le permalien correspondant est affiché: mysite.com/literature/books/mybook

Après avoir suivi le conseil relatif à cette question, types de publication personnalisés, taxonomies et liens permanents

J'ai ajouté cela à mes fonctions:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

Et j'ai changé mon type de message pour 'slug' => 'literature/%literature_category%' Et changé ma taxonomie en 'slug' => 'literature'

Cela fonctionne très bien, sauf que sur mysite.com/literature la pagination ne fonctionne pas, une erreur 404 apparaît sur l'URL suivante:

mysite.com/literature/page/2/

    
posée fxfuture 30.01.2012 - 00:43

1 réponse

6

Suivez les conseils donnés sur la comme vous l'avez déjà fait , mais ajoutez ceci à votre code:

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

Enfin, accédez à Paramètres > Permaliens et cliquez sur Enregistrer. Si cela ne fonctionne toujours pas, enregistrez à nouveau vos permaliens. Parfois, j'ai l'impression que vous devez les sauver deux fois, mais qui sait. Quoi qu'il en soit, laissez-moi savoir comment vous vous en sortez. Notez que la réponse n ° 1 de la science informatique s'applique: Ça marche pour moi ...; -)

Du pays de TMI ...

Pour référence, la raison pour laquelle les pages ne fonctionnent pas par défaut est que WordPress introduit une règle de réécriture pour la littérature /% literature_category% /% book% /% page%, ce qui rend le total sens si vous y réfléchissez. Ainsi, vos permaliens par défaut ont ces règles concurrentes dans cet ordre:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

Tout ce que nous faisons ici consiste à changer l'ordre de ceux-ci en désactivant le dernier (nous pouvons le garder, mais chaque réécriture suivante a ensuite une expression rationnelle supplémentaire à exécuter au chargement de la page) et en l'ajoutant au début de la tableau.

Fait amusant: Si vous avez déjà un "livre" intitulé "page" et qu'il comporte plusieurs pages, cet ordre entrera en conflit et les pages suivantes ne fonctionneront pas!

    
réponse donnée Matthew Boynes 30.01.2012 - 01:55

Lire d'autres questions sur les étiquettes