我有这个问题,我需要一个CPT有几个布局选项和使用模板。最初,WP不支持自定义帖子的模板,但我知道可以通过元框自定义数据手动完成。
这是我在函数中的代码片段,可以选择模板并保存它。它工作正常-将数据添加到数据库并保存/更新模板。我的问题是在最后一部分,我试图将主题重定向到正确的模板,以及它不起作用的一些原因。
// --------Add actions
add_action(\'add_meta_boxes\', \'custom_template_add_custom_box\');
/* Do something with the data entered */
add_action(\'save_post\', \'custom_template_save_postdata\');
// --------Add functions
/* Adds a box to the main column on the Post and Page edit screens */
function custom_template_add_custom_box() {
add_meta_box( \'custom-post-type-choice\', \'Choose custom template\', \'custom_template_inner_box\', \'campaign\', \'side\' );
}
/* Prints the box content */
function custom_template_inner_box( $post ) {
// Use nonce for verification
wp_nonce_field( plugin_basename(__FILE__), \'custom_template_noncename\' );
if ( 0 != count( get_page_templates() ) ) {
$page_template = get_post_meta($post->ID, \'_wp_page_template\', TRUE); ?>
<p><strong><?php _e(\'Template\') ?></strong></p>
<label class="screen-reader-text" for="page_template"><?php _e(\'Page Template\') ?></label>
<select name="page_template" id="page_template">
<option value=\'default\'><?php _e(\'Default Template\'); ?></option>
<?php page_template_dropdown($page_template); ?>
</select>
<?php }
}
/* When the post is saved, saves our custom data */
function custom_template_save_postdata( $post_id ) {
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !isset( $_POST[\'custom_template_noncename\'] ) || !wp_verify_nonce( $_POST[\'custom_template_noncename\'], plugin_basename(__FILE__) ) )
return $post_id;
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE )
return $post_id;
// Check permissions
if ( \'page\' == $_POST[\'post_type\'] ) {
if ( !current_user_can( \'edit_page\', $post_id ) )
return $post_id;
}
else {
if ( !current_user_can( \'edit_post\', $post_id ) )
return $post_id;
}
// OK, we\'re authenticated: we need to find and save the data
$page_template = $_POST[\'page_template\'];
if ( !empty($page_template) && \'campaign\' == get_post_type($post_id) ) {
$page_templates = get_page_templates();
if ( \'default\' != $page_template && !in_array($page_template, $page_templates) ) {
if ( $wp_error )
return new WP_Error(\'invalid_page_template\', __(\'The page template is invalid.\'));
else
return 0;
}
update_post_meta($post_id, \'_wp_page_template\', $page_template);
}
}
/* Custom template redirection hook */
function custom_template_redirect() {
global $post;
if ( is_single() && \'campaign\' == get_post_type($post) ) {
$page_template = get_page_template();
include($page_template);
exit;
}
}
add_action("template_redirect", \'custom_template_redirect\');
那么,我如何“使用”该页面的所选模板呢?