web-dev-qa-db-fra.com

Comment puis-je forcer le type de publication personnalisé à utiliser un modèle spécifique?

Je crée un site Web de newsletter et chaque page de destination de la newsletter utilise le même modèle que la page d'accueil. Peut-on forcer chaque page de destination de la newsletter à utiliser le modèle de page de garde?.

Les rédacteurs peuvent choisir le modèle par nom de modèle dans la zone d'attributs de la page lors de la modification d'un bulletin d'information, mais je me demande s'il existe un moyen de faciliter cela.

Merci d'avance.

1
petron

Si vos newsletters sont un type de publication personnalisé, vous pouvez créer un modèle qui leur est dédié à l’aide de la hiérarchie des modèles .

Un modèle pour une seule page serait ..

single-{custom-post-type-name}.php

Un modèle pour une page d'archive serait ..

archive-{custom-post-type-name}.php

Ces modèles étant automatiquement sélectionnés, vous n'avez pas besoin de les ajouter à un attribut de modèle de page dans l'éditeur.

2
Justin

La solution ci-dessous, si j'ai bien compris votre question, définira le modèle par défaut sur le modèle de page php que vous souhaitez, mais vous devrez examiner le nom du fichier dans vos fichiers de thème. Vous indiquez dans le titre le type de message personnalisé, mais dans votre question, vous avez une page, donc je l'ai fait en fonction de la page et j'ai commenté où vous pouvez changer cela en message/message personnalisé.

La solution consiste à définir le modèle de page par défaut, puis à supprimer les options de sélection de modèle pour les non-administrateurs, afin de vous assurer que vous pouvez supprimer le deuxième crochet pour permettre aux utilisateurs de définir si le modèle par défaut était celui que vous souhaitiez.

//  This hooks into the page template and over rides the default template use this to make sure your magazine template is always default
    add_filter( 'template_include', 'default_page_template', 99 );

    function default_page_template( $template ) {
// Change page to post if not a page your working on or custom post type name
        if ( is_singular( 'page' )  ) {
            // change the default-page-template.php to your template name
            $default_template = locate_template( array( 'default-page-template.php' ) );
            if ( '' != $default_template ) {
                return $default_template ;
            }
        }

        return $template;
    }


// removes the user page select meta-box for user roles that are not admins
add_action( 'admin_menu', 'restrict_access' );
function restrict_access() {
// if the user is not admin - you can add any user roles or multiple roles
if(!current_user_can('administrator')){
    // Not tested but think this is the correct code for page template meta-box
    remove_meta_box( 'pageparentdiv', 'page','normal' );
    }
}
2
Sam