web-dev-qa-db-fra.com

Ajouter un modèle à un type d'article personnalisé

Je suis en train de recoder mon site Web avec des types d'articles personnalisés pour être mieux organisé, avoir une meilleure expérience de recherche et être en mesure de cacher certaines pages à d'autres contributeurs, mais j'ai un petit problème.

J'ai mis en place un type de publication nommé Files qui contient des fichiers que mes contributeurs ne devraient pas voir. Fondamentalement, les pages juridiques, la page de contact et ainsi de suite.

Comme j'avais toutes les pages dans le type par défaut Pages post, j'ai pu sélectionner un modèle pour chaque page dans les attributs de page. Maintenant, dans mon nouveau type de page personnalisée, je ne peux que sélectionner l'ordre de la page et rien d'autre. J'ai donc un modèle pour les pages légales et un autre pour la page de contact, qui inclut tout le code PHP. Comment sélectionner ces modèles dans mon nouveau type de publication personnalisé?


MODIFIER

J'ai bien compris qu'il est uniquement possible de définir un modèle en configurant un fichier PHP nommé single-*(post_type_name)*. Mais comme je l'ai dit, j'ai deux modèles différents, et d'autres viendront très bientôt, alors comment puis-je les définir sur un ou peut-être deux messages à l'intérieur de ce post_type. Il doit y avoir une possibilité, n'est-ce pas? Il est peu probable que les créateurs de WordPress nous créent un nouveau post_type pour un seul fichier ...

2
Sam

D'après ce que j'ai compris, vous avez deux options.

Option 1: Solution dynamique Créez des catégories pour votre type d'article personnalisé - chaque catégorie aura son propre modèle.

Vous créez ensuite un modèle unique qui est divisé en catégories. Cela signifie que vous utilisez l'en-tête et le pied de page généraux dans votre single-nom-de-poste.nom.php et tout ce que vous souhaitez appliquer aux deux modèles, mais que dans le fond, vous créez une logique php pour "si la catégorie x, utilisez le modèle de contenu y (ou partiel, j'aime les partiels) "et" si catégorie z, utiliser le template de contenu z (ou partiel) ". Je suppose que si vous travaillez dans des modèles, le code vous convient, mais s'il ne s'agit pas simplement de commenter, je peux vous donner un exemple.

Option 2: Solution statique Chaque publication de votre type de publication personnalisée reçoit son propre modèle.

Vous devez utiliser single-posttypename.php comme valeur par défaut, mais vous pouvez ensuite créer un seul postypename-postslug.php et vous bénéficiez d'un modèle personnalisé pour ce message spécifique que vous pouvez déranger. Tant que vos slugs correspondent, ça va juste savoir quoi faire.

Option 2 Exemple:

single-file.php (comme modèle par défaut)

single-file-legaldocument2.php (en tant que modèle personnalisé pour votredomaine.ca/fichier/legaldocument2)

2
Faye

À partir de WordPress version 4.7 , vous pouvez désormais attribuer des modèles de page personnalisés à d’autres types de publication avec page. Veuillez consulter la réponse publiée dans ce sujet https://wordpress.stackexchange.com/a/264573/14347

0
Vinod Dalvi

Créez un fichier modèle comme celui-ci dans votre thème enfant.

<?php

// Template Name: CPT Template
// Template Post Type: files

En supposant que fichiers correspond au nom de votre type de publication personnalisée.

WordPress supporte maintenant cette fonctionnalité

0
Dev

Le filtre single_template vous permettra d'utiliser le fichier de modèle de votre choix pour votre CPT, mais il vous appartient de fournir un moyen de sélection et de stockage d'un nom de modèle ou d'une autre référence pour en faire une solution dynamique.

Pour cela, le type de publication page intégré effectue la lecture de tous les fichiers de modèle valides de votre thème et l'ajout de cette liste à une meta box , qui stocke le nom de fichier sélectionné dans post méta.

Vous pouvez rapidement dupliquer ce problème en enregistrant manuellement un nom de fichier dans un Champ personnalisé (post méta) , puis en ajoutant un filtre pour rechercher cette méta clé dans la publication en cours. Voici un exemple rapide et non testé de mon autre réponse liée dans un commentaire ci-dessus -

function wpa_single_cpt_template( $templates = '' ){
    $single = get_queried_object();

    if( 'files' == $single->post_type ){
        $template_name = get_post_meta( $single->ID, 'my_template_file', 'true' );
        if( !empty( $template_name ) ){
            $templates = locate_template( $template_name, false );
        }
    }
    return $templates;
}
add_filter( 'single_template', 'wpa_single_cpt_template' );
0
Milo