web-dev-qa-db-ja.com

プラグインからページテンプレートを読み込む方法は?

プラグインから直接ページテンプレートをテーマに追加したいです。アイデアは、ページ属性の下のドロップダウンにテンプレートが表示され、すべてのコードがプラグインに含まれる必要があるということです。

それを達成する方法についての任意のヒント?

4
smartcat

theme_page_templates フィルタを使用すると、次のようにページテンプレートのドロップダウンリストにテンプレートを追加できます。

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

これでWPはテーマディレクトリでmy-custom-template.phpを検索するようになるので、 page_template フィルタを次のように使用してプラグインディレクトリにリダイレクトする必要があります。

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

これについてもっとここで読んでください: プログラムでカスタムテンプレートページを追加します

7
cjbj

コーデックスから:

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

その後、現在のテンプレートを使用し、それらをプログラムで必要なものに追加します。

0
Svartbaard

助けてくれてありがとう。現在のWordPressのバージョンで動作するようにコードを少し変更しました。また、複数のカスタムテンプレートをサポートするように変更しました。

もっと良い方法があると思いますが、うまくいきました。

/**
 * 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

これは、上記の回答と上記のコメントを組み合わせたものです。

利用可能なテンプレートのリストにプラグインを追加する機能:

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


テンプレートをプラグイン内の適切なディレクトリに向ける機能:

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