Type de message personnalisé Slug / Conflit de slug de page - Empêcher l'utilisation du slug réservé lors de la sauvegarde de la page?

12

J'ai un type de portefeuille personnalisé (mon portefeuille) dans mon thème et tout fonctionne bien, sauf une chose. Lorsque des personnes créent une page avec un slug de portfolio, par exemple: exemple.com/portfolio, le thème pense que je souhaite utiliser la page d'archive de type publication personnalisée, et non ma page créée dans l'éditeur.

Puis-je en quelque sorte "réserver" le portefeuille slug lorsque des pages sont enregistrées pour être sûr qu'il ne soit jamais utilisé, éventuellement renommé portfolio-page?

Mon projet utilise les méthodes décrites dans ce tutoriel, voici le conflit auquel je fais référence:

  

"En plus d'avoir à patcher le code, il y a un autre piège ici dans ce   vous ne pouvez pas appeler votre slug de page de la même manière que votre type de message personnalisé   limace. Pensez à votre slug de type de message personnalisé en tant que mot clé réservé;   cependant, vous pouvez attribuer au titre de votre page le même nom que votre   type de slug personnalisé aussi longtemps que votre slug de page est quelque chose   différent." -    enlace

Merci pour tout conseil!

    
posée hhins 19.10.2011 - 16:50

3 réponses

13

Les 2 filtres suivants vous permettent de vous connecter lorsque WordPress vérifie le slug et se trouve dans la fonction wp_unique_post_slug () du fichier wp-includes / post.php.

Il existe 2 filtres, un pour les publications hiérarchiques et un pour les publications non hiérarchiques. Le filtre hiérarchique fournit l’ID du post-parent. Par conséquent, si le $ post_parent vaut 0, vous savez que c’est un post "de base".

Les filtres transmettent également le type $ post_type si vous souhaitez ajouter des types de publication spécifiques à votre logique.

En renvoyant "true", vous indiquez à WordPress que ce slug est mauvais, donc WordPress ajoute un suffixe, comme si vous essayiez de nous envoyer un nom de message / slug déjà pris.

add_filter( 'wp_unique_post_slug_is_bad_hierarchical_slug', 'portfolio_is_bad_hierarchical_slug', 10, 4 );
function portfolio_is_bad_hierarchical_slug( $is_bad_hierarchical_slug, $slug, $post_type, $post_parent ) {
    if ( !$post_parent && $slug == 'portfolio' )
        return true;
    return $is_bad_hierarchical_slug;
}

add_filter( 'wp_unique_post_slug_is_bad_flat_slug', 'portfolio_is_bad_flat_slug', 10, 3 );
function portfolio_is_bad_flat_slug( $is_bad_flat_slug, $slug, $post_type ) {
    if ( $slug == 'portfolio' )
        return true;
    return $is_bad_flat_slug;
}
    
réponse donnée Rachel Carden 10.03.2012 - 22:49
1

Créez une page avec un slug de 'portfolio' et rendez-la 'privée'. Il sera caché du public lors de la réservation du slug pour une utilisation ultérieure.

    
réponse donnée Max Yudin 08.03.2012 - 12:26
1

C’est exactement ce qui s’est passé lorsqu’on a examiné un problème de pagination. Nous avons une page d'accueil "News" (slug "news") et la pagination échouait ... les tentatives pour accéder à / news / page / 2 / ont toujours abouti à "404 - Introuvable".

Le problème s'est avéré que notre type personnalisé News avait également reçu le slug "news". En modifiant ce dernier (par exemple en "news_archive"), le problème a été corrigé. Cela a laissé les références d'URL de nouvelles d'origine inchangées. Changer le slug de la page d'accueil de News a également fonctionné, mais toutes les URL incorporeraient le slug modifié.

    
réponse donnée Ross 16.08.2013 - 01:26

Lire d'autres questions sur les étiquettes