เป็นไปได้หรือไม่ที่จะทำให้เทมเพลตหน้ากำหนดเองพร้อมใช้งานจากปลั๊กอิน
เป็นไปได้หรือไม่ที่จะทำให้เทมเพลตหน้ากำหนดเองพร้อมใช้งานจากปลั๊กอิน
คำตอบ:
get_page_template()
สามารถแทนที่ได้ผ่านpage_template
ตัวกรอง หากปลั๊กอินของคุณเป็นไดเรกทอรีที่มีแม่แบบเป็นไฟล์อยู่นั่นเป็นเพียงเรื่องของการส่งชื่อไฟล์เหล่านี้ หากคุณต้องการสร้างพวกเขา "ในทันที" (แก้ไขได้ในพื้นที่ผู้ดูแลระบบและบันทึกไว้ในฐานข้อมูลหรือไม่) คุณอาจต้องการที่จะเขียนพวกเขาไปยังไดเรกทอรีแคชและอ้างถึงพวกเขาหรือขอเข้าtemplate_redirect
และทำeval()
สิ่งบ้าบางอย่าง.
ตัวอย่างง่ายๆสำหรับปลั๊กอินที่ "เปลี่ยนเส้นทาง" ไปยังไฟล์ในไดเรกทอรีปลั๊กอินเดียวกันหากมีเงื่อนไขที่แน่นอน:
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;
}
การเอาชนะget_page_template()
เป็นเพียงแฮ็คที่รวดเร็ว ไม่อนุญาตให้เลือกเทมเพลตจากหน้าจอผู้ดูแลระบบและบุ้งเพจจะถูกเขียนลงในปลั๊กอินอย่างหนักดังนั้นผู้ใช้จึงไม่มีทางรู้ว่าเทมเพลตมาจากไหน
โซลูชันที่ต้องการคือทำตามบทช่วยสอนนี้ซึ่งช่วยให้คุณสามารถลงทะเบียนเทมเพลตหน้าในแบ็คเอนด์จากปลั๊กอิน จากนั้นก็ใช้งานได้เหมือนเทมเพลตอื่น ๆ
/*
* 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',
);
}
ใช่มันเป็นไปได้ ฉันพบปลั๊กอินตัวอย่างนี้มีประโยชน์มาก
อีกวิธีหนึ่งที่เข้ามาในหัวของฉันคือการใช้WP Filesystem APIเพื่อสร้างไฟล์เทมเพลตเป็นธีม ฉันไม่แน่ใจว่ามันเป็นวิธีการที่ดีที่สุดที่จะใช้ แต่ฉันแน่ใจว่ามันใช้งานได้!
ไม่มีคำตอบก่อนหน้านี้สำหรับฉัน ที่นี่หนึ่งที่คุณสามารถเลือกแม่แบบของคุณในผู้ดูแลระบบ Wordpress เพียงวางไว้ในไฟล์ปลั๊กอิน php หลักและเปลี่ยนtemplate-configurator.php
ตามชื่อแม่แบบของคุณ
//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;
}