web-dev-qa-db-fra.com

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

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!

12
hhins

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;
}
13
Rachel Carden

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.

1
Max Yudin

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é.

1
Ross