it-swarm.com.de

Wie kann ich eine Seitenvorlage aus einem Plugin laden?

Ich möchte einem Thema Seitenvorlagen direkt aus dem Plugin hinzufügen. Die Idee ist, dass die Vorlage in der Dropdown-Liste unter Seitenattribute angezeigt wird und sich der gesamte Code im Plugin befinden muss.

Irgendwelche Tipps, wie man das erreicht?

4
smartcat

Mit dem Filter theme_page_templates können Sie der Dropdown-Liste der Seitenvorlagen folgende Vorlagen hinzufügen:

function wpse255804_add_page_template ($templates) {
    $templates['my-custom-template.php'] = 'My Template';
    return $templates;
    }
add_filter ('theme_page_templates', 'wpse255804_add_page_template');

Nun sucht WP nach my-custom-template.php im Theme-Verzeichnis, sodass Sie dies mit dem page_template -Filter wie folgt in Ihr Plugin-Verzeichnis umleiten müssen:

function wpse255804_redirect_page_template ($template) {
    if ('my-custom-template.php' == basename ($template))
        $template = WP_PLUGIN_DIR . '/mypluginname/my-custom-template.php';
    return $template;
    }
add_filter ('page_template', 'wpse255804_redirect_page_template');

Lesen Sie hier mehr darüber: Programmgesteuertes Hinzufügen einer benutzerdefinierten Vorlagenseite

7
cjbj

Aus dem Kodex:

<?php 
   $templates = get_page_templates();
   foreach ( $templates as $template_name => $template_filename ) {
       echo "$template_name ($template_filename)<br />";
   }
?>

Sie erhalten dann die aktuellen Vorlagen und fügen sie programmgesteuert nach Belieben hinzu.

0
Svartbaard

Danke für die Hilfe. Ich habe den Code ein wenig geändert, um mit der aktuellen WordPress-Version zu arbeiten. Es wurde auch geändert, um mehr als eine benutzerdefinierte Vorlage zu unterstützen.

Ich wette, es gibt einen besseren Weg, dies zu tun, aber es hat bei mir funktioniert.

/**
 * Load Template with Plugin
 */
function yourname_add_page_template ($templates) {
    $templates['page-one.php'] = 'title here One';
    $templates['page-two.php'] = 'title here Two';
    $templates['page-three.php'] = 'title here Three';
    return $templates;
}
add_filter ('theme_page_templates', 'yourname_add_page_template');

function yourname_redirect_page_template ($template) {
    $post = get_post();
    $page_template = get_post_meta( $post->ID, '_wp_page_template', true );
    if ('page-one.php' == basename ($page_template)) {
        $template = WP_PLUGIN_DIR . '/pluginname/templates/page-one.php';
        return $template;
    }
    elseif ('page-two.php' == basename ($page_template)) {
        $template = WP_PLUGIN_DIR . '/pluginname/templates/page-two.php';
        return $template;
    }
    elseif ('page-three.php' == basename ($page_template)) {
        $template = WP_PLUGIN_DIR . '/pluginname/templates/page-three.php';
        return $template;
    }
}
add_filter ('page_template', 'yourname_redirect_page_template');

0
user988846

Dies ist eine Kombination aus der obigen Antwort und den obigen Kommentaren, die letztendlich für mich funktionierten.

Die Funktion zum Hinzufügen des Plugins zur Liste der verfügbaren Vorlagen:

function wpse255804_add_page_template ($templates) {
    $templates['my-custom-template.php'] = 'My Template';
    return $templates;
    }
add_filter ('theme_page_templates', 'wpse255804_add_page_template');


Die Funktion, um die Vorlage auf das entsprechende Verzeichnis im Plugin zu verweisen:

function wpse255804_redirect_page_template ($template) {
    $post = get_post();
    $page_template = get_post_meta( $post->ID, '_wp_page_template', true );
    if ('my-custom-template.php' == basename ($page_template))
        $template = WP_PLUGIN_DIR . '/mypluginname/my-custom-template.php';
    return $template;
    }
add_filter ('page_template', 'wpse255804_redirect_page_template');
0
TKEz