Există o modalitate de a schimba selecția implicită a șablonului de pagină?

31 iul. 2015, 20:53:14
Vizualizări: 52.3K
Voturi: 8

Click pe "Pagini" -> Click pe "Adaugă Nou"

În ecranul de adăugare pagină nouă, șablonul implicit selectat este "Șablon Implicit". Există vreo modalitate de a schimba opțiunea implicită în, să zicem "Șablonul Meu"? Astfel încât atunci când dau click pe "Adaugă Nou", "Șablonul Meu" să fie întotdeauna selectat implicit? Acest lucru trebuie făcut înainte ca pagina să fie salvată. Pot realiza asta cu JS. Există vreo opțiune WordPress?

ACTUALIZARE:

Iată un exemplu:

Opțiuni Șablon:

  • Șablon Implicit (selectat automat)
  • Șablonul Meu 1
  • Șablonul Meu 2

Există o modalitate în WordPress pentru a schimba la:

  • Șablon Implicit
  • Șablonul Meu 1 (selectat automat)
  • Șablonul Meu 2

M-am gândit că poate acest lucru ar putea fi realizat cu o funcție:

if (anumite condiții sunt îndeplinite)
 default_template = Șablonul Meu 1
endif

Știu cum funcționează ierarhia șabloanelor. Știu cum să fac ca șablonul meu să fie folosit întotdeauna pentru anumite pagini. Dar asta nu este întrebarea. Încerc doar să fac lucrurile mai ușoare pentru utilizatorul final, astfel încât în anumite condiții să pot preselecta șablonul care ar trebui folosit pentru un grup de pagini, dar în același timp să ofer utilizatorului flexibilitatea de a reveni la alt șablon dacă este necesar.

4
Comentarii

Știu că nu răspunde la întrebarea ta, dar de ce nu modifici pur și simplu șablonul? Astfel, șablonul implicit (page.php sau orice altceva) rămâne corect și folosește scriptul dorit.

jdm2112 jdm2112
31 iul. 2015 21:03:42

Pentru că am mai mult de un șablon, iar anumite grupuri de pagini au șabloane specifice. Schimbarea șablonului implicit în șablonul corect face lucrurile mai ușoare pentru client. Nu este o problemă mare pe un site mic, dar face o diferență semnificativă pe site-uri cu sute de pagini.

gdaniel gdaniel
31 iul. 2015 21:08:01

Ierarhia de șabloane din WP oferă mai multe opțiuni de luat în considerare. S-ar putea să găsești răspunsul acolo. https://developer.wordpress.org/themes/basics/template-hierarchy/

jdm2112 jdm2112
31 iul. 2015 21:19:30

Știu cum funcționează ierarhia. Vreau doar să știu dacă există o opțiune, în afară de JS, pentru a schimba șablonul implicit selectat în ecranul de editare a paginii (când adaugi o pagină nouă). Atât. Și din moment ce esența întrebării este ignorată, presupun că nu există.

gdaniel gdaniel
31 iul. 2015 21:21:42
Toate răspunsurile la întrebare 6
4

Utilizarea template_include (așa cum a sugerat Brad Dalton) schimbă doar template-ul paginii pe partea de front-end, nu și în administrare când editezi o pagină.

Pe de altă parte, modificarea valorii din obiectul post înainte ca metabox-ul să fie randat, așa cum a sugerat czerspalace, funcționează! Am adăugat o verificare pentru a aplica acest lucru doar când $post->page_template nu este setat, astfel:

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 // Nu este pagina pentru afișarea postărilor
        && '' == $post->page_template // Doar când page_template nu este setat
    ) {
        $post->page_template = "page-mytemplate.php";
    }
}
add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);
5 iul. 2016 15:56:34
Comentarii

Dar cum este aceasta implementată în practică?

JGallardo JGallardo
16 sept. 2017 01:20:09

Codul de mai sus ar trebui să funcționeze în fișierul functions.php al temei tale (sau într-un plugin personalizat). Trebuie să înlocuiești șirul page-mytemplate.php cu un nume care se potrivește cu șablonul de pagină dorit din tema ta.

Adrian B Adrian B
18 sept. 2017 15:47:46

M-ai inspirat să fac asta în noul editor de blocuri (Gutenberg) folosind cârligul de filtrare "rest_prepare_{$post_type}".

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

Deși modifică valoarea textului, va trebui să apăsați salvare pentru ca ACF (de exemplu) să se declanșeze și să afișeze câmpurile corespunzătoare, etc.

Jacob Raccuia Jacob Raccuia
30 ian. 2022 20:30:33
0

Nu am testat acest lucru, dar ar putea funcționa. Șablonul este ales în funcție de o valoare din obiectul global post, așa că trebuie să schimbăm acea valoare în obiectul post înainte ca metabox-ul să fie afișat. Codul care alege valoarea implicită a dropdown-ului se află aici: 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 iul. 2015 22:11:38
0

Cea mai simplă metodă pe care am găsit-o, fără a modifica codul, este să creezi un fișier page.php separat (în afara fișierelor tale page_template-name.php) și să folosești get_template_part() pentru a redirecționa către fișierul tău de șablon. Acest lucru oferă șablonul implicit pe întregul site, păstrând în același timp șablonul ca o opțiune separată.

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

Acesta este tot ce trebuie să existe în fișierul tău page.php. Pur și simplu încarcă șablonul tău implicit. Dacă dorești să schimbi șablonul pe întregul site, atunci poți pur și simplu să modifici slug-ul. Orice pagină care are opțiunea implicită selectată se va schimba. Orice pagină care este setată specific să folosească șablonul (adică setată pe template-1 în loc de implicit), nu se va schimba.

8 sept. 2017 11:23:05
3

Am reușit să realizez acest lucru în noul editor de blocuri (Gutenberg).

Sarcina necesită un hook în răspunsul REST API în acest caz.

Am preluat condițiile din răspunsul lui 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
Comentarii

Când am implementat acest cod, editorul îmi seta template-ul la cel specificat, însă primeam mesaje "Actualizare eșuată" de fiecare dată când încercam să actualizez.

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

Acest cod va strica site-ul și va trebui să-l reinstalați din nou.

Elias Prado Elias Prado
13 dec. 2020 05:35:29

Nu funcționează pentru mine. Template-ul se schimbă în interfață, dar în baza de date valoarea rămâne cea veche.

raftaar1191 raftaar1191
13 iun. 2023 18:13:03
0

Folosește template_include în fișierul tău de funcții împreună cu o condiție.

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;
}
1 aug. 2015 10:18:48
0

Pentru mine, acesta este succesul:

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 // Nu este pagina pentru afișarea postărilor
        && '' == $post->page_template // Doar când page_template nu este setat
    ) {
//print_r(get_page_templates( $post )); obține lista de șabloane
//Array([Elementor Canvas] => elementor_canvas [Elementor Full Width] => elementor_header_footer [Theme] => elementor_theme)
        $post->page_template = "elementor_header_footer"; // setează șablonul dorit
    }
}
add_action('add_meta_boxes', 'wpse196289_default_page_template', 1);
23 mar. 2023 10:10:57