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 de slugs lorsque les pages sont enregistrées pour être sûr qu'il ne soit jamais utilisé, peut-être renommé en portfolio?
Mon projet utilise les méthodes décrites dans ce tutoriel, voici le conflit dont je parle:
"En plus de devoir patcher le code, il existe un autre inconvénient: vous ne pouvez pas appeler votre slug de page de la même manière que votre slug de type de message personnalisé. Pensez à votre slug de type de message personnalisé en tant que mot clé réservé; vous pouvez toutefois le titre de votre page est identique à celui de votre type de message personnalisé, tant que votre page est différente. " - http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/
Merci pour tout conseil!
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 () du fichier wp-includes/post.php.
Il existe 2 filtres, l'un pour les publications hiérarchiques et l'autre pour les publications non hiérarchiques. Le filtre hiérarchique fournit l'ID pour le post-parent. Par conséquent, si le $ post_parent a la valeur 0, vous savez qu'il s'agit d'un post "de base".
Les filtres transmettent également $ 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;
}
Créez une page avec un slug de 'portfolio' et rendez-le 'privé'. Il sera caché du public lors de la réservation du slug pour une utilisation ultérieure.
A rencontré exactement ce problème lors de la recherche d'un problème de pagination. Nous avons une page d'accueil Nouvelles (slug "news") et la pagination échouait ... les tentatives pour accéder à/news/page/2/ont toujours abouti à "404 - Not Found".
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 URLs incorporeraient alors le slug modifié.