Există o modalitate de a schimba selecția implicită a șablonului de pagină?
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.
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);

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.

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

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";
}
}

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.

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;
}

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.

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

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;
}

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);
