WordPress

Niestandardowy metabox z przesyłaniem galerii obrazów, który nie będzie dołączał obrazów do posta

  • 4 października, 2019
  • 4 min read
Niestandardowy metabox z przesyłaniem galerii obrazów, który nie będzie dołączał obrazów do posta


Stworzyłem niestandardowy metaboks z programem do przesyłania obrazów, który przesyła wiele obrazów do galerii, którą mogę następnie zapytać. Wszystko działa, zaakceptuj fakt, że obrazy nie są wyświetlane jako dołączone do postu w bibliotece multimediów. Pokazują się jako niepodpięte. Jakieś pomysły ludzie?

<?php
// Add the Meta Box
function agch_properties_add_custom_meta_box() {
    add_meta_box(
        'custom_meta_box', // $id
        'Property Photos', // $title
        'agch_properties_show_custom_meta_box', // $callback
        'properties', // $page
        'normal', // $context
        'high'); // $priority
}
add_action('add_meta_boxes', 'agch_properties_add_custom_meta_box');

// Field Array
$prefix = 'agch_properties_';
$custom_meta_fields = array(
    array(
        'label'=> 'Upload Images',
        'desc'  => 'This is the gallery images on the single item page.',
        'id'    => $prefix.'gallery',
        'type'  => 'gallery'
    ),
);

// The Callback
function agch_properties_show_custom_meta_box($object) {
        global $custom_meta_fields, $post;
        // Use nonce for verification
        echo '<input type="hidden" name="custom_meta_box_nonce" value="'.wp_create_nonce(basename(__FILE__)).'" />';

        // Begin the field table and loop
        echo '<table class="form-table">';
        foreach ($custom_meta_fields as $field) {
                // get value of this field if it exists for this post
                $meta = get_post_meta($post->ID, $field['id'], true);
                // begin a table row with
                echo '<tr>
                <th><label for="'.$field['id'].'">'.$field['label'].'</label></th>
                <td>';
                switch($field['type']) {
                        case 'gallery':
                        $meta_html = null;
                        if ($meta) {
                                $meta_html .= '<ul class="agch_properties_gallery_list">';
                                $meta_array = explode(',', $meta);
                                foreach ($meta_array as $meta_gall_item) {
                                        $meta_html .= '<li><div class="agch_properties_gallery_container"><span class="agch_properties_gallery_close"><img id="' . esc_attr($meta_gall_item) . '" src="' . wp_get_attachment_thumb_url($meta_gall_item) . '"></span></div></li>';
                                }
                                $meta_html .= '</ul>';
                        }
                        echo '<input id="agch_properties_gallery" type="hidden" name="agch_properties_gallery" value="' . esc_attr($meta) . '" />
                        <span id="agch_properties_gallery_src">' . $meta_html . '</span>
                        <div class="agch_gallery_button_container"><input id="agch_properties_gallery_button" type="button" value="Add Images" /></div>';
                        break;
                } //end switch
                echo '</td></tr>';
        } // end foreach
        echo '</table>'; // end table
}

// Save the Data
function agch_properties_save_custom_meta($post_id) {
        global $custom_meta_fields;
        // Verify nonce
        if ($_POST && !wp_verify_nonce($_POST['custom_meta_box_nonce'], basename(__FILE__)))
                return $post_id;
        // Check autosave
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
                return $post_id;
        // Check permissions
        if ('properties' == get_post_type()) {
                if (!current_user_can('edit_page', $post_id))
                        return $post_id;
        } elseif (!current_user_can('edit_post', $post_id)) {
                return $post_id;
        }
        // Loop through meta fields
        foreach ($custom_meta_fields as $field) {
                $new_meta_value = esc_attr($_POST[$field['id']]);
        $meta_key = $field['id'];
                $meta_value = get_post_meta( $post_id, $meta_key, true );
                // If theres a new meta value and the existing meta value is empty
                if ( $new_meta_value && $meta_value == null ) {
                        add_post_meta( $post_id, $meta_key, $new_meta_value, true );
                // If theres a new meta value and the existing meta value is different
                } elseif ( $new_meta_value && $new_meta_value != $meta_value ) {
                        update_post_meta( $post_id, $meta_key, $new_meta_value );
                } elseif ( $new_meta_value == null && $meta_value ) {
                        delete_post_meta( $post_id, $meta_key, $meta_value );
                }
        }
}
add_action('save_post', 'agch_properties_save_custom_meta');

function AGCH_properties_load_wp_admin_style() {
        wp_enqueue_media();
        wp_enqueue_script('media-upload');
        wp_enqueue_style( 'AGCH_properties_admin_css', get_template_directory_uri() . '/library/css/properties_gallery_admin.css' );
        wp_enqueue_script( 'AGCH_properties_admin_script', get_template_directory_uri() . '/library/js/properties_gallery_admin.js' );
}
add_action( 'admin_enqueue_scripts', 'AGCH_properties_load_wp_admin_style' );
?>


Źródło

Warto przeczytać!  Najnowsza wersja SmartCrawl dodaje garść nowych funkcji oraz większą elastyczność opcji