不确定我做错了什么,可能是一些非常愚蠢的事情,比如我错过了一个属性或其他东西。
我正在尝试在主页上显示的主题上构建功能。那一点我能做得很好。我想要做的是让用户更轻松一点。所以他们点击左侧的图片滑块,添加标题,添加说明和!来自媒体库的图像。
到目前为止,为了简化我的想法,我只想添加一个自定义元字段,据我所知,因此用户可以添加图像地址。
我的问题是这个元框没有显示在管理面板中,我不知道为什么?我一直在阅读并遵循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
错误地构成了错误?
答案 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');
}
答案 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
显示元数值。