プラグインから直接ページテンプレートをテーマに追加したいです。アイデアは、ページ属性の下のドロップダウンにテンプレートが表示され、すべてのコードがプラグインに含まれる必要があるということです。
それを達成する方法についての任意のヒント?
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');
これについてもっとここで読んでください: プログラムでカスタムテンプレートページを追加します
コーデックスから:
<?php
$templates = get_page_templates();
foreach ( $templates as $template_name => $template_filename ) {
echo "$template_name ($template_filename)<br />";
}
?>
その後、現在のテンプレートを使用し、それらをプログラムで必要なものに追加します。
助けてくれてありがとう。現在の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');
これは、上記の回答と上記のコメントを組み合わせたものです。
利用可能なテンプレートのリストにプラグインを追加する機能:
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');