在选择特定模板时添加自定义字段

时间:2012-10-30 作者:Leonard

我正在尝试改变一个站点,因为它是在以前的站点上构建的,而不是新的,所以当前的基础设施不是很好。

我有一个网站的一部分,需要它自己的自定义字段。本节不保证它自己的帖子类型,而且由于站点的状态,这样做是非常不切实际的。为了用户着想,我不想让他们使用自定义字段,因为这太草率了。

那么,当选择某个模板时,我如何添加字段(就像您为自定义帖子类型所做的那样)?

1 个回复
SO网友:Chip Bennett

你能做到吗?绝对地您只需查询_wp_page_template 的元键值$post 反对,并相应地采取行动。也许是这样的:

// Globalize $post
global $post;
// Get the page template post meta
$page_template = get_post_meta( $post->ID, \'_wp_page_template\', true );
// If the current page uses our specific
// template, then output our post meta
if ( \'template-foobar.php\' == $page_template ) {
    // Put your specific custom post meta stuff here
}
现在,我建议使用custom post meta box, 而不是自定义字段。

虽然完全实现自定义post meta框稍微超出了您的问题范围,但基本答案保持不变。不过,我会尽力为你指出大致的方向。您将使用add_meta_box(), 在连接到的回调中调用add_meta_boxes-{hook}, 用于定义元盒的回调,以及用于验证/清理和保存自定义post meta的回调。

function wpse70958_add_meta_boxes( $post ) {

    // Get the page template post meta
    $page_template = get_post_meta( $post->ID, \'_wp_page_template\', true );
    // If the current page uses our specific
    // template, then output our custom metabox
    if ( \'template-foobar.php\' == $page_template ) {
        add_meta_box(
            \'wpse70958-custom-metabox\', // Metabox HTML ID attribute
            \'Special Post Meta\', // Metabox title
            \'wpse70598_page_template_metabox\', // callback name
            \'page\', // post type
            \'side\', // context (advanced, normal, or side)
            \'default\', // priority (high, core, default or low)
        );
    }
}
// Make sure to use "_" instead of "-"
add_action( \'add_meta_boxes_page\', \'wpse70958_add_meta_boxes\' );


function wpse70598_page_template_metabox() {
    // Define the meta box form fields here
}


function wpse70958_save_custom_post_meta() {
    // Sanitize/validate post meta here, before calling update_post_meta()
}
add_action( \'publish_page\', \'wpse70958_save_custom_post_meta\' );
add_action( \'draft_page\', \'wpse70958_save_custom_post_meta\' );
add_action( \'future_page\', \'wpse70958_save_custom_post_meta\' );
编辑整个add_meta_box() 调用条件。

结束

相关推荐

Enable page templates. How?

基本问题,但我想启用页面模板。我有一个启用了页面模板的主题。我切换到了另一个模板,但没有更改模板的选项,即使在创建新页面时也是如此。如何打开此选项?我在抄本和论坛上找到了根,但找不到。