web-dev-qa-db-fra.com

Comment contrôler quelle catégorie sera choisie pour le slug d'un post?

J'utilise la structure permalien "/% category% /% postname% /".

Ce qui me dérange, c'est que j'ai des messages qui appartiennent à deux catégories. Et bien sûr, malheureusement, Wordpress choisit toujours le mauvais pour la génération de slug.

Existe-t-il un moyen agréable et propre de contrôler quelle catégorie sera choisie pour les post-limaces?

Merci beaucoup!

3
TigrouMeow

WordPress choisit l'ID le plus bas comme principal permalien. Cependant, TOUTES LES catégories contiendront votre message automatiquement. Signifiant ces deux:

... renverra votre message (étant donné que post-A est à la fois dans les catégories A et B) via une redirection. Il ne peut pas vous les lister tous sur la page d'édition, désolé. Mais cela garantira leur disponibilité dans toutes les catégories.

Bien sûr, get_permalink vous renverra le mauvais.

http://codex.wordpress.org/Using_Permalinks#Using_.25category.25_with_multiple_categories_on_a_post

Maintenant, pour redéfinir le comportement, regardez:

http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/link-template.php#L71 , spécifiquement un peu plus bas sur la ligne 121. Il va utiliser $cats[0]->slug après le tri par ID. Ce qui ne semble pas pouvoir être accroché de quelque manière que ce soit à l'intérieur, donc plus haut ou plus bas.

Ceci est un ticket qui allait changer sa façon de fonctionner http://core.trac.wordpress.org/ticket/18752 il est marqué pour Version future , cependant. Abonnez-vous au billet pour manifester votre intérêt, il sera peut-être intégré à WordPress 3.5 plus tard cette année.

Le filtre pre_post_link vous permettra de remplacer le permalien. post_link aussi.

Sinon, get_the_category devrait vous permettre de pirater les identifiants pour un message (ou de supprimer les autres pour n'en laisser qu'un), mais cela devrait uniquement lorsque le permalien est demandé.

add_filter( 'pre_post_link', function( $permalink, $post ) {

     if ( strpos($permalink, '%category%') === false )
         return; /* not interested */
     add_filter( 'get_the_categories', 'wpse46860_Prune_categories' );
     return $permalink;

}, null, 2 );

function wpse46860_Prune_categories( $categories ) {

    /* run once */
    remove_filter( 'get_the_categories', 'wpse46860_Prune_categories' );

    /* .. Prune the categories to leave the one you need .. */
    global $_Hijack_post_id;

    return $categories;

}

C'est un hack.

Une difficulté supplémentaire est d'obtenir le post_ID pour élaguer les catégories, le filtre get_the_categories ne nous transmet pas le post_ID; utilisez une propriété globale (sale) ou une propriété de classe (clean).

Vous pouvez essayer différents plugins permalink comme:

4
soulseekah

Vous pouvez toujours aller avec un plugin. Hikari Permalink fait exactement ce que vous cherchez ... sans tracas.

1
Travis Pflanz

SI vous pouvez enregistrer la catégorie de votre choix comme permalien par défaut, vous pouvez vous connecter à la fonction get_permalink à l'aide du filtre "pre_post_link" ....

Cela pourrait aussi aider, jetez un coup d'œil .. http://shibashake.com/wordpress-theme/wordpress-permalink-add

0
Rajeev Vyas