Yanıtlar:
get_page_template()
page_template
Filtre ile geçersiz kılınabilir . Eklentiniz, içinde dosyalar olan şablonları içeren bir dizinse, bu dosyaların adlarını iletmekle ilgili. Onları "anında" oluşturmak istiyorsanız (yönetici alanında düzenleyip veritabanına kaydetmek mi istiyorsunuz?), Bir önbellek dizinine yazmak ve bunlara başvurmak ya da template_redirect
çılgınca eval()
şeyler yapmak isteyebilirsiniz. .
Belirli bir kriter doğru ise, aynı eklenti dizinindeki bir dosyaya "yönlendiren" bir eklenti için basit bir örnek:
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;
}
Baskın get_page_template()
sadece hızlı bir kesmek. Şablonun Yönetici ekranından seçilmesine izin vermez ve sayfa fişi eklentiye kodlanmıştır, böylece kullanıcının şablonun nereden geldiğini bilmesine imkan yoktur.
Tercih edilen çözüm , eklentinin arka ucunda bir sayfa şablonu kaydetmenize izin veren bu öğreticiyi takip etmek olacaktır . Sonra başka herhangi bir şablon gibi çalışır.
/*
* 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',
);
}
Evet mümkün. Bu örnek eklentiyi çok faydalı buldum .
Başıma gelen bir başka yaklaşım , şablon dosyasını temaya dönüştürmek için WP Dosya Sistemi API'sini kullanmaktır . Alınacak en iyi yaklaşım olduğundan emin değilim, ama işe yaradığından eminim!
Önceki cevapların hiçbiri benim için çalışıyordu. Burada şablonunuzu Wordpress admin içinden seçebileceğiniz bir tane var. Sadece ana php eklenti dosyasına koyun ve template-configurator.php
şablon adınıza göre değiştirin
//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;
}