Visualizza Media Uploader nel proprio plugin su Wordpress 3.5


10

Ho un piccolo problema con Media Uploader nel nuovo WordPress 3.5. Ho creato il proprio plugin che carica l'immagine. Sto usando questo codice 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>

Il codice funziona bene, ma sfortunatamente le forme sembrano incomplete. Quando seleziono un'immagine, non viene visualizzato "Impostazioni di visualizzazione degli allegati" sul lato destro. Non so perché. Provo ad aggiungere opzioni ai media:

displaySettings: true,
displayUserSettings: true

Ma non funziona.


stai chiamando wp_enqueue_media();?
Bainternet,

Risposte:


7

Solo Uploader

sotto un codice di esempio, funziona solo sulla pagina di modifica post. Se utilizzerai anche su un'altra pagina, includi la funzione wp_enqueue_media(), vedi il titolo successivo.

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;
  });

});

Breve spiegazione di Media Manager

  1. In un primo momento includere gli script pertinenti, utilizzare la funzione principale: wp_enqueue_media(); la funzione imposta tutte le impostazioni pertinenti, localizza il testo del menu e carica tutti i file javascript appropriati.

    Puoi aggiungere uno script personalizzato tramite 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();

    Aggiungi anche uno script predefinito per l'intestazione personalizzata: wp_enqueue_script( 'custom-header' ); crea un riquadro di selezione dell'immagine e lo lega a un elemento di interfaccia, ad esempio un pulsante o un collegamento. Quindi chiama un URL o la nostra scelta con l'id dell'immagine selezionata. Questo è lo stesso script utilizzato quando si selezionano le immagini di intestazione personalizzate del tema.

  2. Aggiungi il pulsante a media manager:

    <?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. Definisci infine la funzione di azione, devi aggiungere un po 'di codice per elaborare l'id dell'immagine che passeremo all'URL del link di aggiornamento dei dati.

    // 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 );
    }

Fonti e suggerimenti:


Quale sarebbe l'attributo 'pagina' per una pagina di amministrazione, diciamo Widgets.php?
AlxVallejo

Usa il plug-in Informazioni amministratore corrente e vedi questa stringa, anche tutti gli hook, che puoi usare su questa pagina. Nel tuo esempio è widgets.php.
fusione

0

Ho inserito una risposta anche nel sito stackoverflow.com e sarebbe di aiuto.

Sto usando questo metodo per utilizzare l'uploader multimediale nel mio plug-in personalizzato. Potrebbe essere questo aiuto.

nel file del tema principale (index.php) aggiungere questi.

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');


Nel file 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+"'/>");
}

file admin (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" />

Maggiori dettagli nel mio blog

Maggiori informazioni http://webexplorar.com/how-to-use-media-uploader-in-wordpress-custom-plugin/


Si prega di trasferire quella risposta alla tua risposta qui. Se quel link viene rimosso, la tua risposta qui sarà inutile.
Pieter Goosen

Penso che la thickbox ora in questo momento sia così vecchia.
Musa Haidari,

0

Usa questo codice per l'uploader multimediale. hai un link nella risposta 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.