Câu trả lời:
get_page_template()
có thể được ghi đè thông qua page_template
bộ lọc. Nếu plugin của bạn là một thư mục chứa các mẫu dưới dạng tệp trong đó, thì đó chỉ là vấn đề chuyển tên của các tệp này. Nếu bạn muốn tạo chúng "nhanh chóng" (chỉnh sửa chúng trong khu vực quản trị và lưu chúng trong cơ sở dữ liệu?), Bạn có thể muốn ghi chúng vào một thư mục bộ đệm và tham khảo chúng, hoặc nối vào template_redirect
và làm một số eval()
thứ điên rồ .
Một ví dụ đơn giản cho một plugin "chuyển hướng" đến một tệp trong cùng thư mục plugin nếu một tiêu chí nhất định là đúng:
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;
}
Ghi đè get_page_template()
chỉ là một hack nhanh chóng. Nó không cho phép mẫu được chọn từ màn hình Quản trị viên và sên trang được mã hóa cứng vào plugin để người dùng không có cách nào để biết mẫu đến từ đâu.
Giải pháp ưa thích sẽ là làm theo hướng dẫn này cho phép bạn đăng ký một mẫu trang ở phần sau từ trình cắm. Sau đó, nó hoạt động như bất kỳ mẫu nào khác.
/*
* 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',
);
}
Vâng, nó là có thể. Tôi thấy plugin ví dụ này rất hữu ích.
Một cách tiếp cận khác xuất hiện trong đầu tôi là sử dụng API WP Filesystem để tạo tệp mẫu theo chủ đề. Tôi không chắc chắn rằng đó là cách tiếp cận tốt nhất để thực hiện, nhưng tôi chắc chắn rằng nó hoạt động!
Không có câu trả lời trước là làm việc cho tôi. Đây là nơi bạn có thể chọn mẫu của mình trong quản trị viên Wordpress. Chỉ cần đặt nó trong tệp plugin php chính của bạn và thay đổi template-configurator.php
theo tên mẫu của bạn
//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;
}