自定义帖子元显示在localhost上,但不显示在实时服务器上?

时间:2016-09-06 00:18:04

标签: wordpress

我有一个问题,说实话,我绝对没有知道发生了什么......

我的自定义帖子类型有一些自定义元字段(称为评论)。在我的本地安装中,它们显示并完美运行:

enter image description here

然而,在现场,他们不会出现!完全消失了!

在屏幕选项中也选择了面板,因此不是问题:

enter image description here

以下是我整个自定义帖子类型的代码......也许我做过蠢事?

<?php
// Register Custom Post Type
function review() {

    $labels = array(
        'name'                  => 'Reviews',
        'singular_name'         => 'Review',
        'menu_name'             => 'Reviews',
        'name_admin_bar'        => 'Review',
        'archives'              => 'Review Archives',
        'parent_item_colon'     => 'Parent Item:',
        'all_items'             => 'All Items',
        'add_new_item'          => 'Add New Item',
        'add_new'               => 'Add New',
        'new_item'              => 'New Item',
        'edit_item'             => 'Edit Item',
        'update_item'           => 'Update Item',
        'view_item'             => 'View Item',
        'search_items'          => 'Search Item',
        'not_found'             => 'Not found',
        'not_found_in_trash'    => 'Not found in Trash',
        'featured_image'        => 'Featured Image',
        'set_featured_image'    => 'Set featured image',
        'remove_featured_image' => 'Remove featured image',
        'use_featured_image'    => 'Use as featured image',
        'insert_into_item'      => 'Insert into item',
        'uploaded_to_this_item' => 'Uploaded to this item',
        'items_list'            => 'Items list',
        'items_list_navigation' => 'Items list navigation',
        'filter_items_list'     => 'Filter items list',
    );
    $args = array(
        'label'                 => 'Review',
        'description'           => 'A product review',
        'labels'                => $labels,
        'supports'              => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments',  'revisions'),
        'taxonomies'            => array( 'category', 'post_tag' ),
        'hierarchical'          => false,
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'menu_position'         => 5,
        'menu_icon'             => 'dashicons-edit',
        'show_in_admin_bar'     => true,
        'show_in_nav_menus'     => true,
        'can_export'            => true,
        'has_archive'           => true,
        'exclude_from_search'   => false,
        'publicly_queryable'    => true,
        'capability_type'       => 'page',
    );
    register_post_type( 'review', $args );

}
add_action( 'init', 'review', 0 );

//Review options meta

/**
 * Generated by the WordPress Meta Box generator
 * at http://jeremyhixon.com/tool/wordpress-meta-box-generator/
 */

function review_options_get_meta( $value ) {
    global $post;

    $field = get_post_meta( $post->ID, $value, true );
    if ( ! empty( $field ) ) {
        return is_array( $field ) ? stripslashes_deep( $field ) : stripslashes( wp_kses_decode_entities( $field ) );
    } else {
        return false;
    }
}

function review_options_add_meta_box() {
    add_meta_box(
        'review_options-review-options',
        __( 'Review options', 'review_options' ),
        'review_options_html',
        'review',
        'core',
        'high'
    );
}
add_action( 'add_meta_boxes', 'review_options_add_meta_box' );

function review_options_html( $post) {
    wp_nonce_field( '_review_options_nonce', 'review_options_nonce' ); ?>

    <p>Options for your reviews</p>

    <p>
        <label for="review_options_review_score"><?php _e( 'Review Score', 'review_options' ); ?></label><br>
        <select name="review_options_review_score" id="review_options_review_score" style="width: 50%;">
            <option <?php echo (review_options_get_meta( 'review_options_review_score' ) === '1' ) ? 'selected' : '' ?>>1</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_score' ) === '2' ) ? 'selected' : '' ?>>2</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_score' ) === '3' ) ? 'selected' : '' ?>>3</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_score' ) === '4' ) ? 'selected' : '' ?>>4</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_score' ) === '5' ) ? 'selected' : '' ?>>5</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_score' ) === '6' ) ? 'selected' : '' ?>>6</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_score' ) === '7' ) ? 'selected' : '' ?>>7</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_score' ) === '8' ) ? 'selected' : '' ?>>8</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_score' ) === '9' ) ? 'selected' : '' ?>>9</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_score' ) === '10' ) ? 'selected' : '' ?>>10</option>
        </select>
    </p>    <p>
        <label for="review_options_review_title_colour"><?php _e( 'Review title colour', 'review_options' ); ?></label><br>
        <select name="review_options_review_title_colour" id="review_options_review_title_colour">
            <option <?php echo (review_options_get_meta( 'review_options_review_title_colour' ) === '' ) ? 'selected' : '' ?>>Default</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_title_colour' ) === 'black' ) ? 'selected' : '' ?>>Black</option>
            <option <?php echo (review_options_get_meta( 'review_options_review_title_colour' ) === 'white' ) ? 'selected' : '' ?>>White</option>
        </select>
    </p><?php
}

function review_options_save( $post_id ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
    if ( ! isset( $_POST['review_options_nonce'] ) || ! wp_verify_nonce( $_POST['review_options_nonce'], '_review_options_nonce' ) ) return;
    if ( ! current_user_can( 'edit_post', $post_id ) ) return;

    if ( isset( $_POST['review_options_review_score'] ) )
        update_post_meta( $post_id, 'review_options_review_score', esc_attr( $_POST['review_options_review_score'] ) );
    if ( isset( $_POST['review_options_review_title_colour'] ) )
        update_post_meta( $post_id, 'review_options_review_title_colour', esc_attr( $_POST['review_options_review_title_colour'] ) );
}
add_action( 'save_post', 'review_options_save' );

/*
    Usage: review_options_get_meta( 'review_options_review_score' )
    Usage: review_options_get_meta( 'review_options_review_title_colour' )
*/



?>

或许它与我唯一的其他帖子类型有关?

<?php // Register Custom Post Type
function product() {

    $labels = array(
        'name'                  => _x( 'Products', 'Post Type General Name', 'text_domain' ),
        'singular_name'         => _x( 'Product', 'Post Type Singular Name', 'text_domain' ),
        'menu_name'             => __( 'Product', 'text_domain' ),
        'name_admin_bar'        => __( 'Product', 'text_domain' ),
        'archives'              => __( 'Products', 'text_domain' ),
        'parent_item_colon'     => __( 'Product', 'text_domain' ),
        'all_items'             => __( 'All Products', 'text_domain' ),
        'add_new_item'          => __( 'Add New Product', 'text_domain' ),
        'add_new'               => __( 'Add New', 'text_domain' ),
        'new_item'              => __( 'New Product', 'text_domain' ),
        'edit_item'             => __( 'Edit Product', 'text_domain' ),
        'update_item'           => __( 'Update Product', 'text_domain' ),
        'view_item'             => __( 'View Product', 'text_domain' ),
        'search_items'          => __( 'Search Products', 'text_domain' ),
        'not_found'             => __( 'Not found', 'text_domain' ),
        'not_found_in_trash'    => __( 'Not found in Trash', 'text_domain' ),
        'featured_image'        => __( 'Featured Image', 'text_domain' ),
        'set_featured_image'    => __( 'Set featured image', 'text_domain' ),
        'remove_featured_image' => __( 'Remove featured image', 'text_domain' ),
        'use_featured_image'    => __( 'Use as featured image', 'text_domain' ),
        'insert_into_item'      => __( 'Insert into Product', 'text_domain' ),
        'uploaded_to_this_item' => __( 'Uploaded to this Product', 'text_domain' ),
        'items_list'            => __( 'Product list', 'text_domain' ),
        'items_list_navigation' => __( 'Product list navigation', 'text_domain' ),
        'filter_items_list'     => __( 'Filter Product list', 'text_domain' ),
    );
    $args = array(
        'label'                 => __( 'Product', 'text_domain' ),
        'description'           => __( 'A product', 'text_domain' ),
        'labels'                => $labels,
        'supports'              => array( 'title', 'editor', 'thumbnail', ),
        'hierarchical'          => false,
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'menu_position'         => 8,
        'menu_icon'             => 'dashicons-archive',
        'show_in_admin_bar'     => true,
        'show_in_nav_menus'     => true,
        'can_export'            => true,
        'has_archive'           => true,
        'exclude_from_search'   => true,
        'publicly_queryable'    => true,
        'capability_type'       => 'page',
    );
    register_post_type( 'product', $args );

}
add_action( 'init', 'product', 0 );

//Creation of Meta Box for post type "destination_category" (Start)
add_action( 'admin_init', 'my_destination_category' );
//destination_sub_category_admin -  is the required HTML id attribute
//Select Destination Sub Category -  is the text visible in the heading of the meta box section
//display_destination_subcategory_meta_box - is the callback which renders the contents of the meta box
//destination_category - is the name of the custom post type where the meta box will be displayed
// normal - defines the part of the page where the edit screen section should be shown
// high - defines the priority within the context where the boxes should show

function my_destination_category() {
    foreach( array( 'post', 'review' ) as $pt )
    add_meta_box(
            'destination_sub_category_admin',
            'Select Destination Sub Category',
            'display_destination_subcategory_meta_box',
            $pt,
            'normal',
            'high');

    function display_destination_subcategory_meta_box( $select_category ) {
    // Retrieve Current Selected Category ID based on the Category Created
    global $wpdb;
    $selectcat="SELECT * FROM ".$wpdb->prefix."posts WHERE `post_type`='product' AND `post_status`='publish' ORDER BY `ID` DESC";
    $resultant = $wpdb->get_results($selectcat);
    $rescount=count($resultant);
    $category_selected_id = intval( get_post_meta( $select_category->ID, 'destination_category_id', true ) );
    ?>
    <table>
        <tr>
            <td style="width: 150px">Select Category</td>
            <td>
                <select style="width: 100px" name="category_selection" id="meta_box_category" style="float:left; width:50%; !important">
                <?php
                if($rescount==0)
                {?>
                <option value="null">No Posts have been created</option>
                <?php
                }
                else
                {
                // Generate all items of drop-down list
                                ?>
                                    <option value="">None</option>
                                <?php
                foreach($resultant as $singleresultant)
                {
                ?>
                    <option value="<?php echo $singleresultant->ID; ?>" <?php echo selected( $singleresultant->ID, $category_selected_id ); ?>>
                    <?php echo $singleresultant->post_title; ?>
                    </option>
                    <?php
                    }
                    }
                    ?>
                </select>
            </td>
        </tr>
    </table>
    <?php
}
// Registering a Save Post Function
add_action( 'save_post', 'destination_admin_sub_category', 10, 2 );
function destination_admin_sub_category( $select_category_id, $select_category ) {
    if ( $select_category->post_type == 'post' || 'review' ) {
             if ( isset( $_POST['category_selection'] ) && $_POST['category_selection'] != '' ) {
                        echo update_post_meta( $select_category_id, 'destination_category_id', $_POST['category_selection'] );
                     }    }
}
}

/**
 * Generated by the WordPress Meta Box Generator at 
 */
class Rational_Meta_Box {
    private $screens = array(
        'product',
    );
    private $fields = array(
        array(
            'id' => 'box-art',
            'label' => 'Box Art',
            'type' => 'media',
        ),
        array(
            'id' => 'developer',
            'label' => 'Developer',
            'type' => 'text',
        ),
        array(
            'id' => 'publisher',
            'label' => 'Publisher',
            'type' => 'text',
        ),
        array(
            'id' => 'release-date',
            'label' => 'Release Date',
            'type' => 'date',
        ),
    );

    /**
     * Class construct method. Adds actions to their respective WordPress hooks.
     */
    public function __construct() {
        add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
        add_action( 'admin_footer', array( $this, 'admin_footer' ) );
        add_action( 'save_post', array( $this, 'save_post' ) );
    }

    /**
     * Hooks into WordPress' add_meta_boxes function.
     * Goes through screens (post types) and adds the meta box.
     */
    public function add_meta_boxes() {
        foreach ( $this->screens as $screen ) {
            add_meta_box(
                'product-options',
                __( 'Product Options', 'product-options' ),
                array( $this, 'add_meta_box_callback' ),
                $screen,
                'advanced',
                'core'
            );
        }
    }

    /**
     * Generates the HTML for the meta box
     *
     * @param object $post WordPress post object
     */
    public function add_meta_box_callback( $post ) {
        wp_nonce_field( 'product_options_data', 'product_options_nonce' );
        echo 'Options for products';
        $this->generate_fields( $post );
    }

    /**
     * Hooks into WordPress' admin_footer function.
     * Adds scripts for media uploader.
     */
    public function admin_footer() {
        ?><script>
            // https://codestag.com/how-to-use-wordpress-3-5-media-uploader-in-theme-options/
            jQuery(document).ready(function($){
                if ( typeof wp.media !== 'undefined' ) {
                    var _custom_media = true,
                    _orig_send_attachment = wp.media.editor.send.attachment;
                    $('.rational-metabox-media').click(function(e) {
                        var send_attachment_bkp = wp.media.editor.send.attachment;
                        var button = $(this);
                        var id = button.attr('id').replace('_button', '');
                        _custom_media = true;
                            wp.media.editor.send.attachment = function(props, attachment){
                            if ( _custom_media ) {
                                $("#"+id).val(attachment.url);
                            } else {
                                return _orig_send_attachment.apply( this, [props, attachment] );
                            };
                        }
                        wp.media.editor.open(button);
                        return false;
                    });
                    $('.add_media').on('click', function(){
                        _custom_media = false;
                    });
                }
            });
        </script><?php
    }

    /**
     * Generates the field's HTML for the meta box.
     */
    public function generate_fields( $post ) {
        $output = '';
        foreach ( $this->fields as $field ) {
            $label = '<label for="' . $field['id'] . '">' . $field['label'] . '</label>';
            $db_value = get_post_meta( $post->ID, 'product_options_' . $field['id'], true );
            switch ( $field['type'] ) {
                case 'media':
                    $input = sprintf(
                        '<input class="regular-text" id="%s" name="%s" type="text" value="%s"> <input class="button rational-metabox-media" id="%s_button" name="%s_button" type="button" value="Upload" />',
                        $field['id'],
                        $field['id'],
                        $db_value,
                        $field['id'],
                        $field['id']
                    );
                    break;
                default:
                    $input = sprintf(
                        '<input %s id="%s" name="%s" type="%s" value="%s">',
                        $field['type'] !== 'color' ? 'class="regular-text"' : '',
                        $field['id'],
                        $field['id'],
                        $field['type'],
                        $db_value
                    );
            }
            $output .= $this->row_format( $label, $input );
        }
        echo '<table class="form-table"><tbody>' . $output . '</tbody></table>';
    }

    /**
     * Generates the HTML for table rows.
     */
    public function row_format( $label, $input ) {
        return sprintf(
            '<tr><th scope="row">%s</th><td>%s</td></tr>',
            $label,
            $input
        );
    }
    /**
     * Hooks into WordPress' save_post function
     */
    public function save_post( $post_id ) {
        if ( ! isset( $_POST['product_options_nonce'] ) )
            return $post_id;

        $nonce = $_POST['product_options_nonce'];
        if ( !wp_verify_nonce( $nonce, 'product_options_data' ) )
            return $post_id;

        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
            return $post_id;

        foreach ( $this->fields as $field ) {
            if ( isset( $_POST[ $field['id'] ] ) ) {
                switch ( $field['type'] ) {
                    case 'email':
                        $_POST[ $field['id'] ] = sanitize_email( $_POST[ $field['id'] ] );
                        break;
                    case 'text':
                        $_POST[ $field['id'] ] = sanitize_text_field( $_POST[ $field['id'] ] );
                        break;
                }
                update_post_meta( $post_id, 'product_options_' . $field['id'], $_POST[ $field['id'] ] );
            } else if ( $field['type'] === 'checkbox' ) {
                update_post_meta( $post_id, 'product_options_' . $field['id'], '0' );
            }
        }
    }
}
new Rational_Meta_Box;

 ?>

无论哪种方式,我完全不知道为什么它在本地完美地工作并弄乱了我的实时服务器......这令人费解!

提前感谢您的帮助!

0 个答案:

没有答案