自定义帖子类型元素不显示`add_meta_box`

时间:2015-03-12 13:19:34

标签: php wordpress custom-post-type

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

我正在尝试在主页上显示的主题上构建功能。那一点我能做得很好。我想要做的是让用户更轻松一点。所以他们点击左侧的图片滑块,添加标题,添加说明和!来自媒体库的图像。

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

我的问题是这个元框没有显示在管理面板中,我不知道为什么?我一直在阅读并遵循serval教程等等。似乎无法显示它?任何人都可以看错吗?

这是我建立的

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错误地构成了错误?

2 个答案:

答案 0 :(得分:2)

<强>更新

你的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

答案 1 :(得分:0)

我做了几次。首先,您必须创建帖子类型。在您的插件文件中,您必须require定义自定义帖子类型和元框的文件。在元框文件中,您主要生成表单元素的HTML代码并添加一个更新post元的函数。我将举例说明(主文件中需要的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显示元数值。