it-swarm.com.de

Gibt es eine Möglichkeit, die Standardauswahl für Seitenvorlagen zu ändern?

Klicken Sie auf "Seiten" -> Klicken Sie auf "Neu hinzufügen"

Im Bildschirm "Neue Seite hinzufügen". Die ausgewählte Standardseitenvorlage ist "Standardvorlage". Gibt es eine Möglichkeit, die Standardoption auf "Meine andere Vorlage" zu ändern. Wenn ich also auf "Neu hinzufügen" klicke, wird standardmäßig immer "Meine andere Vorlage" ausgewählt. Dies muss erfolgen, bevor die Seite gespeichert wird. Ich kann das mit JS erreichen. Gibt es eine WP Option?

UPDATE:

Hier ist ein Beispiel:

Vorlagenoptionen:

  • Standardvorlage (automatisch ausgewählt)
  • Meine Vorlage 1
  • Meine Vorlage 2

Gibt es eine Möglichkeit, WordPress zu ändern:

  • Standardvorlage
  • Meine Vorlage 1 (automatisch ausgewählt)
  • Meine Vorlage 2

Ich dachte, dies könnte vielleicht mit einer Funktion erreicht werden:

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

Ich weiß, wie die Vorlagenhierarchie funktioniert. Ich weiß, wie ich meine Vorlage für bestimmte Seiten immer verwenden kann. Aber das ist nicht die Frage. Ich versuche nur, dem Endbenutzer die Arbeit zu erleichtern, damit ich unter bestimmten Bedingungen die Vorlage vorwählen kann, die für eine Gruppe von Seiten verwendet werden soll, aber dem Benutzer trotzdem die Flexibilität geben kann, bei Bedarf zu einer anderen Vorlage zurückzukehren .

5
gdaniel

Die Verwendung von template_include (wie von Brad Dalton vorgeschlagen) ändert nur die Seitenvorlage im Front-End, nicht im Admin-Bereich, wenn eine Seite bearbeitet wird.

Auf der anderen Seite funktioniert es, den Wert im Post-Objekt zu ändern, bevor die Metabox gerendert wird, wie von czerspalace vorgeschlagen! Ich habe ein Häkchen hinzugefügt, um dies nur anzuwenden, wenn $post->page_template nicht festgelegt ist, wie folgt:

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

Ich habe das nicht getestet, aber es könnte funktionieren. Die Vorlage wird basierend auf einem Wert im globalen Post-Objekt ausgewählt. Daher müssen Sie diesen Wert im Post-Objekt ändern, bevor die Metabox gerendert wird. Der Code, der das Standard-Dropdown auswählt, ist hier: 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

Das habe ich im neuen Blockeditor (Gutenberg) geschafft.

Die Task benötigt in diesem Fall einen Hook in REST API response .

Ich habe die Bedingungen von Adrian Antwort genommen.

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

Der einfachste Weg, den ich gefunden habe, ohne Code zu hacken, besteht darin, eine separate page.php (außerhalb Ihrer page_template-name.php-Dateien) und get_template_part () zu erstellen, um zu Ihrer Vorlagendatei umzuleiten. Auf diese Weise wird die Standardvorlage für Ihre Website bereitgestellt und die Vorlage als diskrete Option beibehalten.

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

Dies ist alles, was in Ihrer page.php-Datei vorhanden sein muss. Es wird einfach Ihre Standardvorlage abgerufen. Wenn Sie Ihre Template-Site breit ändern möchten, können Sie einfach den Slug ändern. Jede Seite, auf der die Standardoption ausgewählt ist, wird geändert. Jede Seite, die speziell für die Verwendung der Vorlage festgelegt wurde (d. H. Auf Vorlage-1 anstelle der Standardeinstellung festgelegt wurde), wird nicht geändert.

0
Ben Matthews

Verwenden Sie template_include in Ihrer Funktionsdatei mit einem bedingten Tag.

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