Jawaban:
get_page_template()
dapat diganti melalui page_template
filter. Jika plugin Anda adalah direktori dengan templat sebagai file di dalamnya, itu hanya masalah meneruskan nama-nama file ini. Jika Anda ingin membuatnya "on the fly" (sunting di area admin dan simpan di database?), Anda mungkin ingin menulisnya ke direktori cache dan merujuknya, atau menghubungkannya template_redirect
dan melakukan beberapa eval()
hal gila .
Contoh sederhana untuk plugin yang "mengarahkan" ke file di direktori plugin yang sama jika kriteria tertentu benar:
add_filter( 'page_template', 'wpa3396_page_template' );
function wpa3396_page_template( $page_template )
{
if ( is_page( 'my-custom-page-slug' ) ) {
$page_template = dirname( __FILE__ ) . '/custom-page-template.php';
}
return $page_template;
}
Overriding get_page_template()
hanyalah peretasan cepat. Itu tidak memungkinkan templat untuk dipilih dari layar Admin dan halaman siput-kode ke dalam plugin sehingga pengguna tidak memiliki cara untuk mengetahui dari mana templat berasal.
Solusi yang disukai adalah dengan mengikuti tutorial ini yang memungkinkan Anda untuk mendaftarkan templat halaman di back-end dari plug-in. Kemudian berfungsi seperti template lainnya.
/*
* Initializes the plugin by setting filters and administration functions.
*/
private function __construct() {
$this->templates = array();
// Add a filter to the attributes metabox to inject template into the cache.
add_filter('page_attributes_dropdown_pages_args',
array( $this, 'register_project_templates' )
);
// Add a filter to the save post to inject out template into the page cache
add_filter('wp_insert_post_data',
array( $this, 'register_project_templates' )
);
// Add a filter to the template include to determine if the page has our
// template assigned and return it's path
add_filter('template_include',
array( $this, 'view_project_template')
);
// Add your templates to this array.
$this->templates = array(
'goodtobebad-template.php' => 'It\'s Good to Be Bad',
);
}
Ya itu mungkin. Saya menemukan contoh plugin ini sangat membantu.
Pendekatan lain yang muncul di kepala saya adalah menggunakan WP Filesystem API untuk membuat file templat dengan tema. Saya tidak yakin itu adalah pendekatan terbaik untuk dilakukan, tetapi saya yakin itu berhasil!
Tidak ada jawaban sebelumnya yang berfungsi untuk saya. Di sini satu tempat Anda dapat memilih templat di admin Wordpress. Masukkan saja ke dalam file plugin php utama Anda dan ubah template-configurator.php
dengan nama templat Anda
//Load template from specific page
add_filter( 'page_template', 'wpa3396_page_template' );
function wpa3396_page_template( $page_template ){
if ( get_page_template_slug() == 'template-configurator.php' ) {
$page_template = dirname( __FILE__ ) . '/template-configurator.php';
}
return $page_template;
}
/**
* Add "Custom" template to page attirbute template section.
*/
add_filter( 'theme_page_templates', 'wpse_288589_add_template_to_select', 10, 4 );
function wpse_288589_add_template_to_select( $post_templates, $wp_theme, $post, $post_type ) {
// Add custom template named template-custom.php to select dropdown
$post_templates['template-configurator.php'] = __('Configurator');
return $post_templates;
}