Wyświetl Media Uploader we własnej wtyczce na Wordpress 3.5

10

Mam mały problem z Media Uploader w nowym WordPress 3.5. Stworzyłem własną wtyczkę, która wgrywa zdjęcie. Używam tego kodu JS:

<script type="text/javascript">
    var file_frame;

    jQuery('.button-secondary').live('click', function( event ){

        event.preventDefault();

        if ( file_frame ) {
            file_frame.open();
            return;
        }

        file_frame = wp.media.frames.file_frame = wp.media(
            {
                title: 'Select File',
                button: {
                    text: jQuery( this ).data( 'uploader_button_text' )
                },
                multiple: false
            }
        );

        file_frame.on('select', function() {
            attachment = file_frame.state().get('selection').first().toJSON();
            jQuery('#IMGsrc').val(attachment.url);
        });

        file_frame.open();
    });
</script>

Kod działa dobrze, ale niestety formularze wydają się niekompletne. Po wybraniu dowolnego zdjęcia po prawej stronie nie jest wyświetlane „Ustawienia wyświetlania załączników”. Nie wiem dlaczego. Próbuję dodać opcje do multimediów:

displaySettings: true,
displayUserSettings: true

Ale to też nie działa.

użytkownik1320276
źródło
dzwonisz wp_enqueue_media();?
Bainternet,

Odpowiedzi:

7

Tylko przesyłający

pod przykładowym kodem działa tylko na stronie edycji postu. Jeśli będziesz używać także na innej stronie, dołącz funkcję wp_enqueue_media(), zobacz następny nagłówek.

jQuery(document).ready(function($) {

  var _custom_media = true,
      _orig_send_attachment = wp.media.editor.send.attachment;

  $('.stag-metabox-table .button').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;
  });

});

Krótkie wyjaśnienie Media Managera

  1. Najpierw dołącz odpowiednie skrypty, użyj funkcji podstawowej: wp_enqueue_media(); funkcja konfiguruje wszystkie odpowiednie ustawienia, lokalizuje tekst menu i ładuje wszystkie odpowiednie pliki javascript.

    Możesz dodać własny skrypt za pośrednictwem wp_enqueue_script().

    // Also adds a check to make sure `wp_enqueue_media` has only been called once.
    // @see: http://core.trac.wordpress.org/ticket/22843
    if ( ! did_action( 'wp_enqueue_media' ) )
        wp_enqueue_media();

    Dodaj także domyślny skrypt niestandardowego nagłówka: wp_enqueue_script( 'custom-header' ); Tworzy ramkę wyboru obrazu i wiąże go z elementem interfejsu, na przykład przyciskiem lub łączem. Następnie wywołuje adres URL lub nasz wybór z wybranym identyfikatorem obrazu. Jest to ten sam skrypt, który jest używany podczas wybierania niestandardowych obrazów nagłówka.

  2. Dodaj przycisk do menedżera multimediów:

    <?php
    $modal_update_href = esc_url( add_query_arg( array(
        'page'     => 'my_media_manager',
        '_wpnonce' => wp_create_nonce( 'my_media_manager_options' ),
    ), admin_url( 'upload.php' ) ) );
    ?>
    
    <p>
    <a id="choose-from-library-link" href="#"
        data-update-link="<?php echo esc_attr( $modal_update_href ); ?>"
        data-choose="<?php esc_attr_e( 'Choose a Default Image' ); ?>"
        data-update="<?php esc_attr_e( 'Set as default image' ); ?>"><?php _e( 'Set default image' ); ?>
    </a> |
    </p>
  3. Zdefiniuj funkcję działania na końcu, musisz dodać kod do przetwarzania identyfikatora obrazu, który przekażemy na adres URL aktualizacji danych.

    // Add to the top of our data-update-link page
    if ( isset($_REQUEST['file']) ) { 
        check_admin_referer( 'my_media_manager_options' );
    
            // Process and save the image id
        $options = get_option( 'my_media_manager_options', TRUE );
        $options['default_image'] = absint( $_REQUEST['file'] );
        update_option( 'my_media_manager_options', $options );
    }

Źródła i wskazówki:

bueltge
źródło
Czym byłby atrybut „strona” dla strony administratora, powiedzmy Widgets.php?
AlxVallejo
Skorzystaj z wtyczki Current Admin Info, a zobaczysz ten ciąg, także wszystkie zaczepy, których możesz użyć na tej stronie. W twoim przykładzie to jest widgets.php.
bueltge
0

Mam umieścić odpowiedź w miejscu stackoverflow.com jak również i to byłoby pomocne.

Korzystam z tej metody, aby użyć programu do przesyłania multimediów do mojej niestandardowej wtyczki. Może to być pomocne.

w głównym pliku motywu (index.php) dodaj je.

wp_enqueue_style('thickbox'); // call to media files in wp
wp_enqueue_script('thickbox');
wp_enqueue_script( 'media-upload'); 


// load script to admin
function wpss_admin_js() {
     $siteurl = get_option('siteurl');
     $url = $siteurl . '/wp-content/plugins/' . basename(dirname(__FILE__)) . '/js/admin_script.js';
     echo "<script type='text/javascript' src='$url'></script>"; 
}
 add_action('admin_head', 'wpss_admin_js');


W pliku admin_script.js

jQuery('#wpss_upload_image_button').click(function() {
    formfield = jQuery('#wpss_upload_image').attr('name');
    tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true');
    return false;
});

window.send_to_editor = function(html) {
 imgurl = jQuery('img',html).attr('src');
 jQuery('#wpss_upload_image').val(imgurl);
 tb_remove();

 jQuery('#wpss_upload_image_thumb').html("<img height='65' src='"+imgurl+"'/>");
}

plik administratora (admin_settings.php),

<div id="wpss_upload_image_thumb" class="wpss-file">
    <?php if(isset($record->security_image) && $record->security_image !='') { ?>
       <img src="<?php echo $record->security_image;?>"  width="65"/><?php } else {    echo $defaultImage; } ?>
</div>
<input id="wpss_upload_image" type="text" size="36" name="wpss_upload_image" value="" class="wpss_text wpss-file" />
<input id="wpss_upload_image_button" type="button" value="Upload Image" class="wpss-filebtn" />

Więcej szczegółów na moim blogu

Więcej informacji http://webexplorar.com/how-to-use-media-uploader-in-wordpress-custom-plugin/

Sumith Harshan
źródło
Prześlij tę odpowiedź na swoją odpowiedź tutaj. Jeśli ten link zostanie usunięty, twoja odpowiedź tutaj będzie bezużyteczna.
Pieter Goosen
Myślę, że teraz gruby jest tak stary.
Musa Haidari,
0

Po prostu użyj tego kodu do przesyłania mediów. masz link w odpowiedzi na jquery.

<label for="upload_image">
    <input id="upload_image" type="text" size="36" name="ad_image" value="http://" /> 
    <input id="upload_image_button" class="button" type="button" value="Upload Image" />
    <br />Enter a URL or upload an image
</label>

<?php
add_action('admin_enqueue_scripts', 'my_admin_scripts');

function my_admin_scripts() {
    if (isset($_GET['page']) && $_GET['page'] == 'my_plugin_page') {
        wp_enqueue_media();
        wp_register_script('my-admin-js', WP_PLUGIN_URL.'/my-plugin/my-admin.js', array('jquery'));
        wp_enqueue_script('my-admin-js');
    }
}

?>

<script>
    jQuery(document).ready(function($){


    var custom_uploader;


    $('#upload_image_button').click(function(e) {

        e.preventDefault();

        //If the uploader object has already been created, reopen the dialog
        if (custom_uploader) {
            custom_uploader.open();
            return;
        }

        //Extend the wp.media object
        custom_uploader = wp.media.frames.file_frame = wp.media({
            title: 'Choose Image',
            button: {
                text: 'Choose Image'
            },
            multiple: true
        });

        //When a file is selected, grab the URL and set it as the text field's value
        custom_uploader.on('select', function() {
            console.log(custom_uploader.state().get('selection').toJSON());
            attachment = custom_uploader.state().get('selection').first().toJSON();
            $('#upload_image').val(attachment.url);
        });

        //Open the uploader dialog
        custom_uploader.open();

    });


});
    </script>
Rutunj sheladiya
źródło