add_action( 'init', 'create_services_box' );
function create_services_box() {
register_post_type( 'Services',
array(
'labels' => array(
'name' => 'Services',
'singular_name' => 'Service',
),
'public' => true,
'menu_position' => 15,
'supports' => array('comments', 'thumbnail', ),
'taxonomies' => array( '' ),
'has_archive' => true
)
);
}
add_filter( 'rwmb_meta_boxes', 'services_meta_boxes' );
function services_meta_boxes( $meta_boxes2 ) {
$meta_boxes2[] = array(
'title' => __( 'Service Metabox ', 'textdomain' ),
'post_types' => array('Services'),
'fields' => array(
array(
'id' => 'Service_box_title',
'name' => __( 'Title :-', 'textdomain' ),
'type' => 'text',
),
array(
'name' => __( 'Image Advanced Upload', 'textdomain' ),
'id' => "service_img",
'type' => 'image_advanced',
'max_file_uploads' => 1,
),
),
);
return $meta_boxes2;
}
我创建了自定义帖子类型 - >服务并使用META BOX插件但是我没有得到正确的输出,图片上传器没有显示,甚至我的数据在更新后没有保存,请告诉我错误是什么
答案 0 :(得分:0)
请您在下面的代码中复制一下吗?检查后
add_action( 'init', 'create_services_box' );
function create_services_box() {
register_post_type( 'Services',
array(
'labels' => array(
'name' => 'Services',
'singular_name' => 'Service',
),
'public' => true,
'menu_position' => 15,
'supports' => array('comments', 'thumbnail', ),
'taxonomies' => array( '' ),
'has_archive' => true
)
);
}
//Add Metabox
add_action('add_meta_boxes', 'add_upload_file_metaboxes');
function add_upload_file_metaboxes() {
add_meta_box('swp_file_upload', 'File Upload', 'swp_file_upload', 'Services', 'normal', 'default');
}
function swp_file_upload() {
global $post;
// Noncename needed to verify where the data originated
echo '<input type="hidden" name="service_noncename" id="service_noncename" value="'.
wp_create_nonce(plugin_basename(__FILE__)).
'" />';
global $wpdb;
$strFile = get_post_meta($post -> ID, $key = 'service_file', true);
$media_file = get_post_meta($post -> ID, $key = '_wp_attached_file', true);
if (!empty($media_file)) {
$strFile = $media_file;
} ?>
<script type = "text/javascript">
// Uploading files
var file_frame;
jQuery('#upload_image_button').live('click', function(service) {
service.preventDefault();
// If the media frame already exists, reopen it.
if (file_frame) {
file_frame.open();
return;
}
// Create the media frame.
file_frame = wp.media.frames.file_frame = wp.media({
title: jQuery(this).data('uploader_title'),
button: {
text: jQuery(this).data('uploader_button_text'),
},
multiple: false // Set to true to allow multiple files to be selected
});
// When a file is selected, run a callback.
file_frame.on('select', function(){
// We set multiple to false so only get one image from the uploader
attachment = file_frame.state().get('selection').first().toJSON();
// here are some of the variables you could use for the attachment;
//var all = JSON.stringify( attachment );
//var id = attachment.id;
//var title = attachment.title;
//var filename = attachment.filename;
var url = attachment.url;
//var link = attachment.link;
//var alt = attachment.alt;
//var author = attachment.author;
//var description = attachment.description;
//var caption = attachment.caption;
//var name = attachment.name;
//var status = attachment.status;
//var uploadedTo = attachment.uploadedTo;
//var date = attachment.date;
//var modified = attachment.modified;
//var type = attachment.type;
//var subtype = attachment.subtype;
//var icon = attachment.icon;
//var dateFormatted = attachment.dateFormatted;
//var editLink = attachment.editLink;
//var fileLength = attachment.fileLength;
var field = document.getElementById("service_file");
field.value = url; //set which variable you want the field to have
});
// Finally, open the modal
file_frame.open();
});
</script>
<div>
<table>
<tr valign = "top">
<td>
<input type = "text"
name = "service_file"
id = "service_file"
size = "70"
value = "<?php echo $strFile; ?>" />
<input id = "upload_image_button"
type = "button"
value = "Upload">
</td> </tr> </table> <input type = "hidden"
name = "img_txt_id"
id = "img_txt_id"
value = "" />
</div> <?php
function admin_scripts() {
wp_enqueue_script('media-upload');
wp_enqueue_script('thickbox');
}
function admin_styles() {
wp_enqueue_style('thickbox');
}
add_action('admin_print_scripts', 'admin_scripts');
add_action('admin_print_styles', 'admin_styles');
}
//Saving the file
function save_service_meta($post_id, $post) {
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if (!wp_verify_nonce($_POST['service_noncename'], plugin_basename(__FILE__))) {
return $post -> ID;
}
// Is the user allowed to edit the post?
if (!current_user_can('edit_post', $post -> ID))
return $post -> ID;
// We need to find and save the data
// We'll put it into an array to make it easier to loop though.
$service_meta['service_file'] = $_POST['service_file'];
// Add values of $service_meta as custom fields
foreach($service_meta as $key => $value) {
if ($post -> post_type == 'revision') return;
$value = implode(',', (array) $value);
if (get_post_meta($post -> ID, $key, FALSE)) { // If the custom field already has a value it will update
update_post_meta($post -> ID, $key, $value);
} else { // If the custom field doesn't have a value it will add
add_post_meta($post -> ID, $key, $value);
}
if (!$value) delete_post_meta($post -> ID, $key); // Delete if blank value
}
}
add_action('save_post', 'save_service_meta', 1, 2); // save the custom fields