自定义帖子类型元未显示“add_meta_box”


Custom post type meta not showing `add_meta_box`

不知道我做错了什么,可能是一些非常愚蠢的事情,比如我错过了一个属性或其他东西。

是的,我正在尝试在主页上显示的主题上构建功能。那一点我可以做得很好。我想做的是让用户更容易一点。因此,他们单击左侧的图像滑块,添加标题,添加描述!媒体库中的图像。

到目前为止,为了简化我的想法,我只想添加一个自定义元字段,据我所知,这样用户就可以添加一个图像地址。

我的问题是这个元框没有显示在管理面板中,我不确定为什么?我一直在阅读并遵循薮猫教程等。只是似乎无法显示它?有人能看出什么不对劲吗?

这是我构建的内容

function post_support(){
    add_theme_support('post-formats',array('aside','Image Slider'));
}
/**
*       create slider, adding post register
*/
function slider_create_slider(){
    register_post_type('Image Slider',
    array('labels'=>
        array('name'=>__('Image slider'),
        'singular_name'=>__('Image slider'),
        'add_new'=>__('Add New slider object'),
        'edit_item'=>__('Edit Slide object'),
        'new_item'=>__('Add New Slide object'),
        'view_item'=>__('View slide object'),
        'search_items'=>__('Search Slide Objects'),
        'not_found'=>__('No Slide objects found'),
        'not_found_in_trash'=>__('No slide Objects found in the bin.')),
    'public'=>true,
    'show_ui'=>true,
    'capibility_type'=>'post','hierarchical'=>false,'rewrite'=>true,'menu_position'=>20,'supports'=>array('title','editor','thumbnail')));
}
/**
*       adding slider's meta boxes
*/
function slider_add_meta_boxes($post){
    //Only need to add image meta
    add_meta_box('ImageSliderMeta',__('image'),'slider_image_meta_box',__('image'),'side','default');
}
function slider_image_meta_box(){
    $image=get_post_meta($post->ID,'ImageSliderMeta',true);
    //only testing atm
    ?>
    <label>Image (url)</label><input name="ImageSliderMeta" value="<?echo$image;?>"/>
    ?>
}
function save_image_meta_box(){
    global$post;
    update_post_meta($post->ID,'ImageSliderMeta',$_POST['ImageSliderMeta']);
}
add_action('after_setup_theme','post_support');
add_action('init','slider_create_slider');
add_action('add_meta_boxes','slider_add_meta_boxes');
add_action('save_post','save_image_meta_box');

是因为我add_action的结构不正确吗?

更新

您的add_meta_box函数未传递正确的参数。

参数 #4,$screen是您要显示元框的帖子类型。使用以下方法;

function slider_create_slider(){
   register_post_type('imageslider'
   ...
}
function slider_add_meta_boxes($post)
{
  add_meta_box('ImageSliderMeta',__('image'),'slider_image_meta_box', 'imageslider');
}

http://codex.wordpress.org/Function_Reference/add_meta_box

我做了几次。首先,您必须创建帖子类型。在插件文件中,您必须require定义自定义帖子类型和元框的文件。在您的元框文件中,您主要生成表单元素的 HTML 代码并添加一个函数,用于更新帖子元。我给你一个例子(options_myplugin.php,在主文件中需要):

function myplugin_staff_meta_box_add() {
    add_meta_box('myplugin-staff-edit', 'Staff Social Meta Box', 'myplugin_meta_box_staff_cb', 'staffs', 'normal', 'high');
}
function myplugin_meta_box_staff_cb($post) {
    $position = get_post_meta($post->ID, 'position', true);
    $facebook = get_post_meta($post->ID, 'facebook', true);
    $twitter = get_post_meta($post->ID, 'twitter', true);
    $gplus = get_post_meta($post->ID, 'gplus', true);
    $linkedin = get_post_meta($post->ID, 'linkedin', true);
    wp_nonce_field('staff_meta_box_nonce', 'staff_meta_box_nonce');
    ?>
    <p class="myplugin_option_box">
        <label for="position" class="myplugin-desc"><?php _e('Position', 'myplugin-nictitate-toolkit'); ?>:</label>
        <input id="position" type="text" name="position" 
            class="myplugin-option-input" value="<?php echo $position; ?>">
        <span>Ex: Project Manager</span>
    </p> 
    <p class="myplugin_option_box">
        <label for="facebook" class="myplugin-desc"><?php _e('Facebook', 'myplugin-nictitate-toolkit'); ?>:</label>
        <input id="facebook" type="text" name="facebook" 
            class="myplugin-option-input" value="<?php echo $facebook; ?>">
        <span>Ex: http://facebook.com/myplugintheme</span>
    </p>  
    <p class="myplugin_option_box">
        <label for="twitter" class="myplugin-desc"><?php _e('Twitter', 'myplugin-nictitate-toolkit'); ?>:</label>
        <input id="twitter" type="text" name="twitter" 
            class="myplugin-option-input" value="<?php echo $twitter; ?>">
        <span>Ex: http://twitter.com/myplugintheme</span>
    </p>
    <p class="myplugin_option_box">
        <label for="gplus" class="myplugin-desc"><?php _e('Google Plus', 'myplugin-nictitate-toolkit'); ?>:</label>
        <input id="gplus" type="text" name="gplus" 
            class="myplugin-option-input" value="<?php echo $gplus; ?>">
        <span>Ex: http://plus.google.com/myplugintheme</span>
    </p>
    <p class="myplugin_option_box">
        <label for="linkedin" class="myplugin-desc"><?php _e('LinkedIn', 'myplugin-nictiate-toolkit'); ?></label>
        <input id="linkedin" type="text" name="linkedin" class="myplugin-option-input" value="<?php echo $linkedin; ?>"/>
        <span>Ex: http://linkedin.com/myplugintheme</span>
    </p>
    <?php
}
add_action('save_post', 'myplugin_save_staff_data');
function myplugin_save_staff_data($post_id) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
        return;
    if (!isset($_POST['staff_meta_box_nonce']) || !wp_verify_nonce($_POST['staff_meta_box_nonce'], 'staff_meta_box_nonce'))
        return;
    if (!current_user_can('edit_post'))
        $allowed = array(
            'a' => array(
                'href' => array()
            )
        );
    if (isset($_POST['position']))
        update_post_meta($post_id, 'position', wp_kses($_POST['position'], $allowed));
    if (isset($_POST['facebook']))
        update_post_meta($post_id, 'facebook', wp_kses($_POST['facebook'], $allowed));
    if (isset($_POST['twitter']))
        update_post_meta($post_id, 'twitter', wp_kses($_POST['twitter'], $allowed));
    if (isset($_POST['gplus']))
        update_post_meta($post_id, 'gplus', wp_kses($_POST['gplus'], $allowed));
    if (isset($_POST['linkedin']))
        update_post_meta($post_id, 'linkedin', wp_kses($_POST['linkedin'], $allowed));
}

从现在开始,您将能够通过 get_post_meta 显示元值。