Celui-ci est délicat, j'ai un type de message personnalisé appelé "dictionnaire", les utilisateurs y ajoutent des "définitions" qui sont automatiquement classées dans les bonnes catégories (ainsi, par exemple, si l'utilisateur ajoute "Apple", il se trouve sous "A").
Les URL ressemblent à ceci:
Maintenant, je veux ajouter des pages WordPress normales et les afficher en quelque sorte sous:
etc.
Je crée de nouvelles pages et je place la page "Dictionnaire" (blog/dictionnaire) comme parent, elles sont donc supposées être là où elles sont censées être, mais affiche RIEN AT TOUT , pas de contenu, rien. Je ne sais absolument pas comment le résoudre. Je ne peux pas les ajouter au type de message personnalisé "dictionnaire", car il ne contient que les définitions.
Des idées? Je préfère éviter mod_rewrite (car je veux que mes pages soient des enfants de "dictionnaire" et non de pages normales reliées par un lien physique).
En bref: J'ai besoin de deux types d’éléments dans un type de publication personnalisé.
UPDATE
On dirait que quand mon "dictionnaire" est un enfant lui-même, cela fonctionne, par exemple:
Pourquoi donc?
Si c'était moi, voici comment j'y arriverais.
En supposant les structures de données suivantes:
Et les URL souhaitées:
Lors de l’enregistrement de votre type de message, le paramètre rewrite
devrait être,
'rewrite' => array( 'slug' => 'dictionary/%dictionary_category%' )
Lors de l’enregistrement de votre taxonomie, le paramètre rewrite
devrait être,
'rewrite' => array( 'slug' => 'dictionary' )
Vous devez filtrer post_type_link
en raison de la balise de réécriture (%dictionary_category%
) dans le slug de réécriture. Voici à quoi cela ressemblerait:
function wpse_119806_post_type_link( $post_link, $post, $leavename, $sample ) {
if ( 'dictionary' == $post->post_type ) {
if ( $categories = get_the_terms( $post->ID, 'dictionary_category' ) ) {
return str_replace( '%dictionary_category%', array_pop( $categories )->slug, $post_link );
}
}
return $post_link;
}
add_filter( 'post_type_link', 'wpse_119806_post_type_link', 10, 4 );
Maintenant,/dictionary/x/works et/dictionary/x/xavier/works.
Ici, nous allons tirer parti du fait que les termes de la catégorie dictionnaires de dictionnaire ne seront jamais supérieurs à un caractère. Tout ce qui suit/dictionary/et plusieurs caractères sera considéré comme une page.
add_action( 'init', 'wpse_119806_rewrite_rules' );
function wpse_119806_rewrite_rules() {
add_rewrite_rule( '(dictionary/[^/]{2,}?)/?$', 'index.php?pagename=$matches[1]', 'top' );
}
Videz vos règles de réécriture (Allez à Paramètres → Permaliens et cliquez sur "Enregistrer les modifications") et tout fonctionnera comme vous le souhaitez.
wpse_119806_rewrite_rules
avec des appels supplémentaires à add_rewrite_rule()
.