C'è un modo per cambiare la selezione predefinita del template di pagina?

31 lug 2015, 20:53:14
Visualizzazioni: 52.3K
Voti: 8

Clicca su "Pagine" -> Clicca su "Aggiungi nuova"

Nella schermata aggiungi nuova pagina, il template predefinito selezionato è "Template predefinito". C'è un modo per cambiare l'opzione predefinita in, per esempio, "Il Mio Altro Template"? In modo che quando clicco su "Aggiungi nuova", "Il Mio Altro Template" sia sempre selezionato di default? Questo deve essere fatto prima che la pagina venga salvata. Posso farlo con JS. Esiste un'opzione WordPress?

AGGIORNAMENTO:

Ecco un esempio:

Opzioni Template:

  • Template Predefinito (selezionato automaticamente)
  • Il Mio Template 1
  • Il Mio Template 2

Esiste un modo in WordPress per cambiare in:

  • Template Predefinito
  • Il Mio Template 1 (selezionato automaticamente)
  • Il Mio Template 2

Ho pensato che forse questo potrebbe essere realizzato con una funzione:

if (alcune condizioni sono soddisfatte)
 template_predefinito = Il Mio Template 1
endif

So come funziona la gerarchia dei template. So come fare in modo che il mio template venga sempre utilizzato per determinate pagine. Ma questa non è la domanda. Sto solo cercando di rendere le cose più facili per l'utente finale in modo che, in determinate condizioni, possa preselezionare il template che dovrebbe essere utilizzato su un gruppo di pagine, ma dare comunque all'utente la flessibilità di tornare a un altro template se necessario.

4
Commenti

So che questo non risponde alla tua domanda, ma perché non cambi semplicemente il template? In questo modo, il template predefinito (page.php o altro) rimane accurato e utilizza lo script che desideri.

jdm2112 jdm2112
31 lug 2015 21:03:42

Perché ho più di un template, e gruppi specifici di pagine hanno template specifici. Cambiare il template predefinito con quello corretto rende le cose più facili per il cliente. Non è un grosso problema su un sito piccolo, ma fa una grande differenza su siti con centinaia di pagine.

gdaniel gdaniel
31 lug 2015 21:08:01

La gerarchia dei template di WP offre diverse opzioni da considerare. Potresti trovare la tua risposta qui. https://developer.wordpress.org/themes/basics/template-hierarchy/

jdm2112 jdm2112
31 lug 2015 21:19:30

So come funziona la gerarchia. Voglio solo sapere se c'è un'opzione, oltre a JS, per cambiare il template selezionato di default nella schermata di modifica della pagina (quando si aggiunge una nuova pagina). Tutto qui. E visto che il punto della domanda viene ignorato, immagino che non ce ne sia uno.

gdaniel gdaniel
31 lug 2015 21:21:42
Tutte le risposte alla domanda 6
4

Utilizzare template_include (come suggerito da Brad Dalton) modifica solo il template della pagina sul front end, non nell'admin durante la modifica di una pagina.

D'altra parte, cambiare il valore nell'oggetto post prima che il metabox venga renderizzato, come suggerito da czerspalace, funziona! Ho aggiunto un controllo per applicare questo solo quando $post->page_template non è impostato, in questo modo:

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 // Non la pagina per elencare i post
        && '' == $post->page_template // Solo quando page_template non è impostato
    ) {
        $post->page_template = "page-mytemplate.php";
    }
}
add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);
5 lug 2016 15:56:34
Commenti

Ma come viene effettivamente implementato?

JGallardo JGallardo
16 set 2017 01:20:09

Il codice sopra dovrebbe funzionare nel file functions.php del tuo tema (o in un plugin personalizzato). Devi cambiare la stringa page-mytemplate.php con un nome che corrisponda al template di pagina desiderato nel tuo tema.

Adrian B Adrian B
18 set 2017 15:47:46

Mi hai ispirato a farlo nel nuovo editor a blocchi (Gutenberg) usando il filtro "rest_prepare_{$post_type}".

Przemek Maczewski Przemek Maczewski
10 feb 2019 13:36:11

Anche se modifica il valore del testo, dovrai premere salva per far sì che ACF (ad esempio) si attivi e mostri i campi appropriati, ecc.

Jacob Raccuia Jacob Raccuia
30 gen 2022 20:30:33
0

Non ho testato questo codice, ma potrebbe funzionare. Il template viene scelto in base a un valore nell'oggetto post globale, quindi dobbiamo modificare quel valore nell'oggetto post prima che il metabox venga renderizzato. Il codice che sceglie il dropdown predefinito si trova qui: 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";
    }
}
31 lug 2015 22:11:38
0

Il modo più semplice che ho trovato, senza modificare il codice, è creare un file page.php separato (lontano dai tuoi file page_template-name.php) e utilizzare get_template_part() per reindirizzare al tuo file template. Questo fornisce il template predefinito per tutto il sito, mantenendo comunque il template come opzione discreta.

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

Questo è tutto ciò che deve esistere nel tuo file page.php. Semplicemente richiama il tuo template predefinito. Se vuoi cambiare il template per tutto il sito, puoi semplicemente modificare lo slug. Qualsiasi pagina che ha l'opzione predefinita selezionata verrà modificata. Qualsiasi pagina impostata specificamente per utilizzare un template diverso (cioè impostata su template-1 invece che predefinito), non cambierà.

8 set 2017 11:23:05
3

Sono riuscito a implementarlo nel nuovo editor a blocchi (Gutenberg).

In questo caso il compito richiede un hook nella risposta dell'API REST.

Ho preso le condizioni dalla risposta di Adrian.

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;
}
10 feb 2019 13:27:37
Commenti

Quando ho implementato questo codice, l'editor impostava il mio template su quello specificato, tuttavia ricevevo messaggi di "Aggiornamento fallito" ogni volta che cercavo di aggiornare.

glass duo glass duo
24 mar 2020 21:51:31

Questo codice romperà il sito e sarà necessario reinstallarlo nuovamente.

Elias Prado Elias Prado
13 dic 2020 05:35:29

Non funziona per me. Il template viene cambiato visivamente ma nel database il valore rimane quello del vecchio template.

raftaar1191 raftaar1191
13 giu 2023 18:13:03
0

Utilizza template_include nel tuo file functions.php con un conditional tag.

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

function default_page_template( $template ) {

    // Verifica se è una pagina singola
    if ( is_singular( 'page' )  ) {
        // Cerca il template 'default-page-template.php' nella cartella del tema
        $default_template = locate_template( array( 'default-page-template.php' ) );
        if ( '' != $default_template ) {
            return $default_template;
        }
    }

    return $template;
}
1 ago 2015 10:18:48
0

Per me ha funzionato:

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 // Non è la pagina per elencare gli articoli
        && '' == $post->page_template // Solo quando page_template non è impostato
    ) {
//print_r(get_page_templates( $post )); ottieni l'elenco dei template
//Array([Elementor Canvas] => elementor_canvas [Elementor Full Width] => elementor_header_footer [Theme] => elementor_theme)
        $post->page_template = "elementor_header_footer"; // imposta il template che desideri
    }
}
add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);
23 mar 2023 10:10:57