Custom Post Type URL Rewriting?


32

J'ai configuré un type de publication personnalisé pour mes projets de portefeuille. L'URL principale pour cela est située à/projects/

Maintenant, j'ai également configuré mes articles de blog en permalink /articles/*/pour la structure permalink. Cela signifie que lorsque je vais voir un projet de portefeuille, l'URL change en/articles/projects/project-name/

Je sais qu'il doit y avoir un moyen de réécrire des permaliens uniquement pour le type de post personnalisé de mes projets. Mais je ne connais pas la syntaxe pour déclarer l'URL slug. J'apprécierais toute aide que je pourrais obtenir!

Réponses:


42

Lorsque vous enregistrez le type de publication personnalisé, vous devez spécifier que la structure de réécriture ne doit pas être précédée de la structure d'URL existante.

En bref, cela signifie que cette ligne dans votre register_post_typeappel:

'rewrite' => array('slug' => 'projects'),

devrait se transformer en ceci:

'rewrite' => array('slug' => 'projects','with_front' => false),

Pour plus d'informations, consultez l' rewriteargument de l' entrée de codex surregister_post_type

modifier: assurez-vous qu'après avoir mis à jour le code, vous videz les règles de réécriture en accédant à Paramètres> Permaliens. Sinon, vous verrez toujours les anciens liens.


génial merci! Juste pour clarifier, tout ce que j'ai à faire pour vider les règles est d'aller à la page Paramètres-> Permaliens et cliquer sur "Enregistrer les modifications", n'est-ce pas?
Jake

4
Vous n'avez même pas besoin de sauvegarder les modifications. Il suffit simplement d'ouvrir la page des paramètres de Permaliens (si votre fichier .htaccess est accessible en écriture. Sinon, cliquez sur Enregistrer les modifications et copiez manuellement le code qu'il retourne dans votre
fichier

2
Cela ne semble pas fonctionner pour moi. Les posts de mes projets vont toujours example.com/projects/title-of-post. J'ai aussi visité la page des liens permanents. Qu'est-ce qui peut causer cela? Il n'y a pas de règles de réécriture dans mon htaccess.
Desi

Wow, merci c'était la partie manquante! Visiter la page des permaliens ne fonctionnait pas, mais SAUVER les paramètres actuels du permalien fonctionnait :)
Alexander Taubenkorb Le

J'ai continué à changer les choses sans effacer les règles de réécriture. Merci pour le conseil!
Tan-007

15

J'ai eu ce problème littéralement il y a 3 jours, puis je suis tombé sur une série sur wp.tutsplus.com . J'ai échangé mon propre code pour mieux répondre à votre question, mais c'est ce avec quoi j'ai fini après avoir suivi la série. Aussi, gardez à l'esprit que cela n'a pas été testé.

// sets custom post type
function my_custom_post_type() {
    register_post_type('Projects', array(   
       'label' => 'Projects','description' => '',
       'public' => true,
       'show_ui' => true,
       'show_in_menu' => true,
       'capability_type' => 'post',
       'hierarchical' => false,
       'publicly_queryable' => true,
       'rewrite' => false,
       'query_var' => true,
       'has_archive' => true,
       'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes'),
       'taxonomies' => array('category','post_tag'),
       // there are a lot more available arguments, but the above is plenty for now
    ));
}

add_action('init', 'my_custom_post_type');

// rewrites custom post type name
global $wp_rewrite;
$projects_structure = '/projects/%year%/%monthnum%/%day%/%projects%/';
$wp_rewrite->add_rewrite_tag("%projects%", '([^/]+)', "project=");
$wp_rewrite->add_permastruct('projects', $projects_structure, false);

Théoriquement, vous pouvez échanger ce que vous voulez dans l'URL stockée dans la $projects_structurevariable, ce qu'il y a exactement ce que j'ai fini par utiliser.

Bonne chance et, comme toujours, assurez-vous de revenir et de nous dire comment cela a fonctionné! :)


1
Les réponses qui ne sont composées que de liens sont généralement considérées comme inutiles car ces ressources peuvent (et vont probablement) cesser d’exister à l’avenir. Résumez le contenu.
chrisguitarguy

Très bien, je vais travailler sur une révision appropriée.
Cmegown

11
Là, ma réponse contient maintenant un code similaire au code de travail que j’ai dans un environnement de production qui réécrit avec succès une URL de type publication personnalisée. J'espère que cela s'avère plus utile!
cmegown
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.