web-dev-qa-db-fra.com

Est-il possible de changer la sélection de modèle de page par défaut?

Cliquez sur "Pages" -> Cliquez sur "Ajouter un nouveau"

Dans l'écran Ajouter une nouvelle page. Le modèle de page par défaut sélectionné est "Modèle par défaut". Existe-t-il un moyen de modifier l'option par défaut en, disons "Mon autre modèle". Ainsi, lorsque je clique sur "Ajouter un nouveau", "Mon autre modèle" sera toujours sélectionné par défaut? Cela doit être fait avant que la page soit enregistrée. Je peux accomplir cela avec JS. Existe-t-il une option WP?

METTRE À JOUR:

Voici un exemple:

Options de modèle:

  • Modèle par défaut (sélectionné automatiquement)
  • Mon modèle 1
  • Mon modèle 2

Y a-t-il un moyen wordpress de changer en:

  • Modèle par défaut
  • Mon modèle 1 (sélectionné automatiquement)
  • Mon modèle 2

Je pensais que peut-être cela pourrait être accompli avec une fonction:

if (some condition is met)
 default_template = My Template 1
endif

Je sais comment fonctionne la hiérarchie des modèles. Je sais comment utiliser mon modèle pour certaines pages. Mais ce n'est pas la question. J'essaie simplement de rendre les choses plus faciles pour l'utilisateur final, afin de pouvoir, à certaines conditions, présélectionner le modèle, qu'il convient de l'utiliser sur un groupe de pages tout en laissant à l'utilisateur la possibilité de revenir à un autre modèle si nécessaire .

5
gdaniel

L'utilisation de template_include (comme suggéré par Brad Dalton) modifie uniquement le modèle de page sur le frontal, pas dans l'administrateur lors de la modification d'une page.

Par contre, changer la valeur dans l'objet post avant que le metabox soit rendu, comme suggéré par czerspalace, fonctionne! J'ai ajouté un chèque pour n'appliquer ceci que lorsque $post->page_template n'est pas défini, comme ceci:

function wpse196289_default_page_template() {
    global $post;
    if ( 'page' == $post->post_type 
        && 0 != count( get_page_templates( $post ) ) 
        && get_option( 'page_for_posts' ) != $post->ID // Not the page for listing posts
        && '' == $post->page_template // Only when page_template is not set
    ) {
        $post->page_template = "page-mytemplate.php";
    }
}
add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);
4
Adrian B

Je n'ai pas testé cela, mais cela peut fonctionner. Le modèle est choisi en fonction d'une valeur de l'objet post global. Nous devons donc modifier cette valeur dans l'objet post avant que le métabox ne soit restitué. Le code qui choisit le menu déroulant par défaut est ici: https://core.trac.wordpress.org/browser/trunk/src/wp-admin/includes/meta-boxes.php#L751

add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);

function wpse196289_default_page_template() {
    global $post;
    if ( 'page' == $post->post_type && 0 != count( get_page_templates( $post ) ) && get_option( 'page_for_posts' ) != $post->ID ) {
         if( $my_conditions )
             $post->page_template = "page-mytemplate.php";
    }
}
1
czerspalace

J'ai réussi à accomplir cela dans le nouveau éditeur de blocs (Gutenberg).

La tâche nécessite un raccordement à REST réponse de l'API} dans ce cas.

J'ai pris les conditions de Adrian's réponse.

foreach ( array( 'page', 'post' ) as $post_type ) :
    add_filter( "rest_prepare_{$post_type}", 'wpse196289_rest_set_default_page_template', 1, 2 );
endforeach;

function wpse196289_rest_set_default_page_template( $data, $post ) {
    if ( 0 != count( get_page_templates( $post ) ) && get_option( 'page_for_posts' ) != $post->ID && '' == $data->data['template'] ) :
        $data->data['template'] = 'page-mytemplate.php';
    endif;

    return $data;
}
0
Przemek Maczewski

Le moyen le plus simple que j'ai trouvé, sans piratage de code, est de créer un page.php séparé (loin de vos fichiers page_template-name.php) et get_template_part () de le rediriger vers votre fichier de modèle. Cela fournit ensuite le modèle par défaut sur votre site, tout en conservant le modèle en tant qu'option discrète.

<?php get_template_part('page_template-name'); ?>

C'est tout ce qui doit exister dans votre fichier page.php. Il obtient simplement votre modèle par défaut. Si vous souhaitez modifier votre modèle de site, vous pouvez simplement changer le slug. Toute page pour laquelle l'option par défaut est sélectionnée changera. Toute page spécifiquement configurée pour utiliser le modèle (c'est-à-dire définie sur template-1 au lieu de la valeur par défaut) ne changera pas.

0
Ben Matthews

Utilisez template_include dans votre fichier de fonctions avec une balise conditionnelle.

add_filter( 'template_include', 'default_page_template', 99 );

function default_page_template( $template ) {

    if ( is_singular( 'page' )  ) {
        $default_template = locate_template( array( 'default-page-template.php' ) );
        if ( '' != $default_template ) {
            return $default_template ;
        }
    }

    return $template;
}
0
Brad Dalton