我的函数中有下面的代码。php文件,它工作得很好,允许我在自定义帖子类型“服务”中使用页面模板。
我已经定义了在第一行使用“服务”的“类型”。
define(\'MY_CUSTOM_POST_TYPE\', \'services\');
问题是我有多种自定义帖子类型。我想使用该功能,允许我为所有自定义帖子类型选择页面模板。作为一个完全的新手,我不能让它工作。
以下是完整的代码:
# Define your custom post type string
define(\'MY_CUSTOM_POST_TYPE\', \'services\');
/**
* Register the meta box
*/
add_action(\'add_meta_boxes\', \'page_templates_dropdown_metabox\');
function page_templates_dropdown_metabox(){
add_meta_box(
MY_CUSTOM_POST_TYPE.\'-page-template\',
__(\'Template\', \'my_template\'),
\'render_page_template_dropdown_metabox\',
MY_CUSTOM_POST_TYPE,
\'side\', #I prefer placement under the post actions meta box
\'low\'
);
}
/**
* Render your metabox - This code is similar to what is rendered on the page post type
* @return void
*/
function render_page_template_dropdown_metabox(){
global $post;
$template = get_post_meta($post->ID, \'_wp_page_template\', true);
echo "
<label class=\'screen-reader-text\' for=\'page_template\'>Page Template</label>
<select name=\'_wp_page_template\' id=\'page_template\'>
<option value=\'default\'>Default Template</option>";
page_template_dropdown($template);
echo "</select>";
}
/**
* Save the page template
* @return void
*/
function save_page_template($post_id){
# Skip the auto saves
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
return;
elseif ( defined( \'DOING_AJAX\' ) && DOING_AJAX )
return;
elseif ( defined( \'DOING_CRON\' ) && DOING_CRON )
return;
# Only update the page template meta if we are on our specific post type
elseif(MY_CUSTOM_POST_TYPE === $_POST[\'post_type\'])
update_post_meta($post_id, \'_wp_page_template\', esc_attr($_POST[\'_wp_page_template\']));
}
add_action(\'save_post\', \'save_page_template\');
/**
* Set the page template
* @param string $template The determined template from the WordPress brain
* @return string $template Full path to predefined or custom page template
*/
function set_page_template($template){
global $post;
if(MY_CUSTOM_POST_TYPE === $post->post_type){
$custom_template = get_post_meta($post->ID, \'_wp_page_template\', true);
if($custom_template)
#since our dropdown only gives the basename, use the locate_template() function to easily find the full path
return locate_template($custom_template);
}
return $template;
}
add_filter(\'single_template\', \'set_page_template\');
最合适的回答,由SO网友:Sisir 整理而成
转储常量MY_CUSTOM_POST_TYPE
使用$post->post_type
相反
/**
* Register the meta box
*/
add_action(\'add_meta_boxes\', \'page_templates_dropdown_metabox\');
function page_templates_dropdown_metabox(){
global $post;
add_meta_box(
$post->post_type.\'-page-template\',
__(\'Template\', \'my_template\'),
\'render_page_template_dropdown_metabox\',
$post->post_type,
\'side\', #I prefer placement under the post actions meta box
\'low\'
);
}
/**
* Render your metabox - This code is similar to what is rendered on the page post type
* @return void
*/
function render_page_template_dropdown_metabox(){
global $post;
$template = get_post_meta($post->ID, \'_wp_page_template\', true);
echo "
<label class=\'screen-reader-text\' for=\'page_template\'>Page Template</label>
<select name=\'_wp_page_template\' id=\'page_template\'>
<option value=\'default\'>Default Template</option>";
page_template_dropdown($template);
echo "</select>";
}
/**
* Save the page template
* @return void
*/
function save_page_template($post_id){
# Skip the auto saves
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
return;
elseif ( defined( \'DOING_AJAX\' ) && DOING_AJAX )
return;
elseif ( defined( \'DOING_CRON\' ) && DOING_CRON )
return;
update_post_meta($post_id, \'_wp_page_template\', esc_attr($_POST[\'_wp_page_template\']));
}
add_action(\'save_post\', \'save_page_template\');
/**
* Set the page template
* @param string $template The determined template from the WordPress brain
* @return string $template Full path to predefined or custom page template
*/
function set_page_template($template){
global $post;
$custom_template = get_post_meta($post->ID, \'_wp_page_template\', true);
if($custom_template)
#since our dropdown only gives the basename, use the locate_template() function to easily find the full path
return locate_template($custom_template);
return $template;
}
add_filter(\'single_template\', \'set_page_template\');
未测试代码
代码将显示所有帖子类型的下拉列表。