Benutzerdefinierte Medien hochladen MetaBox funktioniert nicht

Ich füge eine Media-Upload-MetaBox zu einem benutzerdefinierten Post-Typ hinzu, und es funktioniert nicht. Wenn ich auf die Schaltfläche Hochladen klicke, passiert nichts.

Nachdem ich den Code stundenlang analysiert habe, kann ich immer noch nicht herausfinden, wo ich einen Fehler gemacht habe.

Hier ist mein Code zum Registrieren von Media Metabox.

class vendorlogoMetabox { private $screen = array( 'reviews', ); private $meta_fields = array( array( 'label' => 'Vendor Logo', 'id' => 'vendor_logo', 'type' => 'media', ), ); public function __construct() { add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) ); add_action( 'admin_footer', array( $this, 'media_fields' ) ); add_action( 'save_post', array( $this, 'save_fields' ) ); } public function add_meta_boxes() { foreach ( $this->screen as $single_screen ) { add_meta_box( 'vendorlogo', __( 'Vendor Logo', 'textdomain' ), array( $this, 'meta_box_callback' ), $single_screen, 'advanced', 'high' ); } } public function meta_box_callback( $post ) { wp_nonce_field( 'vendorlogo_data', 'vendorlogo_nonce' ); $this->field_generator( $post ); } public function media_fields() { ?> jQuery(document).ready(function($){ if ( typeof wp.media !== 'undefined' ) { var _custom_media = true, _orig_send_attachment = wp.media.editor.send.attachment; $('.vendorlogo-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 ) { $('input#'+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; }); } }); meta_fields as $meta_field ) { $label = ''; $meta_value = get_post_meta( $post->ID, $meta_field['id'], true ); if ( empty( $meta_value ) ) { $meta_value = $meta_field['default']; } switch ( $meta_field['type'] ) { case 'media': $input = sprintf( ' ', $meta_field['id'], $meta_field['id'], $meta_value, $meta_field['id'], $meta_field['id'] ); break; default: $input = sprintf( '', $meta_field['type'] !== 'color' ? 'style="width: 100%"' : '', $meta_field['id'], $meta_field['id'], $meta_field['type'], $meta_value ); } $output .= $this->format_rows( $label, $input ); } echo '' . $output . '
'; } public function format_rows( $label, $input ) { return ''.$label.''.$input.''; } public function save_fields( $post_id ) { if ( ! isset( $_POST['vendorlogo_nonce'] ) ) return $post_id; $nonce = $_POST['vendorlogo_nonce']; if ( !wp_verify_nonce( $nonce, 'vendorlogo_data' ) ) return $post_id; if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return $post_id; foreach ( $this->meta_fields as $meta_field ) { if ( isset( $_POST[ $meta_field['id'] ] ) ) { switch ( $meta_field['type'] ) { case 'email': $_POST[ $meta_field['id'] ] = sanitize_email( $_POST[ $meta_field['id'] ] ); break; case 'text': $_POST[ $meta_field['id'] ] = sanitize_text_field( $_POST[ $meta_field['id'] ] ); break; } update_post_meta( $post_id, $meta_field['id'], $_POST[ $meta_field['id'] ] ); } else if ( $meta_field['type'] === 'checkbox' ) { update_post_meta( $post_id, $meta_field['id'], '0' ); } } } } if (class_exists('vendorlogoMetabox')) { new vendorlogoMetabox; };

Wo ist der Fehler, der dieses Verhalten verursachen würde?

UPDATE: Ich habe festgestellt, dass nach dem Ändern des Arrays vom benutzerdefinierten Post-Typ auf die Seite der Upload funktioniert. Aber warum funktioniert es nicht für benutzerdefinierte Post-Typ?

  class vendorlogoMetabox { private $screen = array( 'page', ); 

Der gesamte Code funktioniert jetzt für die Seite … Irgendwelche Ideen, was mit dem benutzerdefinierten Beitragstyp nicht stimmt?

UPDATE 2: Ich denke, ich habe herausgefunden, was das verursacht, aber ich weiß nicht warum. Während ich den benutzerdefinierten Post-Typ registrierte, wollte ich nur “title” in $ args array unterstützen.

 $args = array( 'label' => __( 'Review', 'Itcs' ), 'description' => __( 'Adds a review post type', 'Itcs' ), 'labels' => $labels, 'supports' => array('title'), 'taxonomies' => array( 'review_category' ), 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'menu_icon' => 'dashicons-format-status', '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' => 'post', //'supports' => array( 'title' ), ); 

aber dann fügte ich hinzu

 'supports' => array('title', 'editor', 'thumbnail',), 

und der Medien-Upload funktioniert nun für den benutzerdefinierten Post-Typ. Hinzufügen von ‘Editor’ triggerse es. Aber ich verstehe nicht, warum das funktioniert hat? Bedeutet dies, dass ein aktiver Editor die einzige Möglichkeit ist, Medienmetabox dem benutzerdefinierten Beitragstyp hinzuzufügen?

Solutions Collecting From Web of "Benutzerdefinierte Medien hochladen MetaBox funktioniert nicht"