我使用自定义帖子类型并在自定义帖子类型

时间:2016-05-06 13:38:51

标签: wordpress custom-post-type

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插件但是我没有得到正确的输出,图片上传器没有显示,甚至我的数据在更新后没有保存,请告诉我错误是什么

1 个答案:

答案 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