web-dev-qa-db-fra.com

Pages normales en tant qu'enfants de mon type de message personnalisé

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:

  • blog/dictionnaire/- page d'accueil du dictionnaire
  • blog/dictionary/x/- liste des définitions commençant par "x" lettre
  • blog/dictionary/x/Xavier - définition et traduction de Word "Xavier"

Maintenant, je veux ajouter des pages WordPress normales et les afficher en quelque sorte sous:

  • blog/dictionnaire/règles
  • blog/dictionnaire/auteur

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:

  • blog/dictionnaire/auteurs - n'affiche rien
  • blog/page1/dictionary/authors - affiche la page des auteurs

Pourquoi donc?

1
Wordpressor

Si c'était moi, voici comment j'y arriverais.

Préface

En supposant les structures de données suivantes:

  • Type de message: "dictionnaire"
  • Taxonomie: "dictionary_category", termes limités à une seule lettre

Et les URL souhaitées:

  • / dictionary/=> page (cela devrait fonctionner immédiatement)
  • / dictionary/rules/=> page
  • / dictionary/x/=> archive de taxonomie
  • / dictionary/x/xavier/=> Vue unique

1. Définissez les types de poste et de taxonomie

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.

2. Définissez les URL de la page

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.

Remarques

  • Cela ignore le/blog /; Je suppose que vous avez compris ce qui se passe, alors changez ce code si nécessaire pour l'ajouter.
  • Vous pouvez ajouter plus de règles pour que les pages aient des hiérarchies de page plus profondes. Cela ne prend en charge que le deuxième niveau. Cela n'ajoute pas non plus de règles pour le flux, la pagination, etc. pour les pages. Pour en ajouter, ajoutez-les simplement à wpse_119806_rewrite_rules avec des appels supplémentaires à add_rewrite_rule().
  • Personnellement, je n’utiliserais pas de taxonomie pour les lettres du dictionnaire, mais cela ressemble à ce que vous faites, alors j’y suis allé. Si c'était moi, j'utiliserais une requête personnalisée pour ceux-là.
2
Matthew Boynes