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

13

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

Puis-je en quelque sorte "réserver" le portefeuille de slugs lorsque les pages sont enregistrées pour être sûr qu'il ne sera jamais utilisé, peut-être renommé page de portfolio?

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

"Au-delà d'avoir à patcher le code, il y a un autre problème ici en ce que vous ne pouvez pas appeler votre slug de page de la même manière que votre slug de type de publication personnalisé. Considérez votre slug de type de publication personnalisé comme un mot clé réservé; cependant, vous pouvez faire le titre de votre page le même nom que votre slug de type de publication personnalisé tant que votre slug de page est quelque chose de différent. " - http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

Merci pour tout conseil!

hhins
la source
Une option que je vois serait de supprimer cela du register_post_type () init: 'rewrite' => array ('slug' => 'portfolio', 'with_front' => true), et juste définir 'rewrite' => false et il suffit de vivre avec les vilains éléments de portefeuille "unique".
hhins
Votez pour votre question car même moi, je veux connaître la réponse! J'ai travaillé avec des publications personnalisées plusieurs fois, mais je ne l'ai jamais remarqué, et maintenant après avoir lu votre question, je l'ai essayé. Vous avez raison, WordPress se confond ici!
Rutwick Gangurde

Réponses:

13

Les 2 filtres suivants vous permettent de vous connecter lorsque WordPress vérifie le slug et se trouvent dans la fonction wp_unique_post_slug () dans le 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 parent du post, donc si $ post_parent est 0, vous savez qu'il s'agit d'un post "de base".

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

En renvoyant "true", vous dites à WordPress que ce slug est mauvais, donc WordPress ajoute un suffixe, tout comme il le ferait si vous essayiez de nous un nom / slug de message 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;
}
Rachel Carden
la source
Pour une raison quelconque, je suis toujours confronté au même problème
Tan-007
1

Créez une page avec un slug de «portfolio» et rendez-la «privée». Il sera caché au public lors de la réservation de la limace à un usage ultérieur.

Max Yudin
la source
1

A rencontré exactement ce problème lors de l'examen d'un problème de pagination. Nous avons une page d'accueil de News (slug "news") et la pagination a échoué ... les tentatives pour accéder à / news / page / 2 / ont toujours abouti à '404 - Not Found'.

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

Ross
la source