web-dev-qa-db-fra.com

Custom Post Type URL Rewriting?

J'ai configuré un type de publication personnalisé pour mes projets de portefeuille. L'URL principale pour cela se trouve dans/projects /

Maintenant, j'ai également configuré mon blog en permalien vers/articles/*/pour la structure permalink. Cela signifie que lorsque je vais voir un projet de portefeuille, l'URL change en/articles/projets/nom-projet /

Je sais qu'il doit y avoir un moyen de réécrire les 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!

30
Jake

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 de votre appel register_post_type:

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

devrait se transformer en ceci:

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

Pour plus d'informations, consultez l'argument rewrite à partir de l'entrée de codex sur register_post_type

edit: assurez-vous qu'après la mise à jour du code, vous effacez les règles de réécriture en accédant à Paramètres> Permaliens. Sinon, vous verrez toujours les anciens liens.

37
0x61696f

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 variable $projects_structure, 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é! :)

14
cmegown