页面模板-此代码仅适用于一种自定义帖子类型

时间:2013-03-19 作者:designlobby

我的函数中有下面的代码。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\');

1 个回复
最合适的回答,由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\');
未测试代码

代码将显示所有帖子类型的下拉列表。

结束

相关推荐