Display Media Uploader en su propio complemento en Wordpress 3.5

10

Tengo un pequeño problema con Media Uploader en el nuevo WordPress 3.5. Creé un complemento propio que es subir la imagen. Estoy usando este código 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>

El código funciona bien, pero desafortunadamente los formularios parecen incompletos. Cuando selecciono cualquier imagen, no me aparece 'Configuración de visualización de archivos adjuntos' en el lado derecho. No se porque. Intento agregar opciones a los medios:

displaySettings: true,
displayUserSettings: true

Pero tampoco funciona.

usuario1320276
fuente
estas llamando wp_enqueue_media();?
Bainternet

Respuestas:

7

Solo cargador

debajo de un código de ejemplo, solo funciona en la página de edición posterior. Si va a usar también en otra página, incluya la función wp_enqueue_media(), vea el siguiente título.

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 explicación de Media Manager

  1. Al principio, incluya los scripts relevantes, use la función principal: wp_enqueue_media(); la función configura todas las configuraciones relevantes, localiza el texto del menú y carga todos los archivos javascript apropiados.

    Puede agregar un script personalizado a través de 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();

    Agregue también un script predeterminado para el encabezado personalizado: wp_enqueue_script( 'custom-header' ); esto crea un marco de selección de imagen y lo vincula a un elemento de la interfaz, por ejemplo, un botón o enlace. Luego llama a una url o nuestra elección con la identificación de imagen seleccionada. Este es el mismo script que se utiliza al seleccionar imágenes de encabezado personalizadas del tema.

  2. Agregue el botón al administrador de medios:

    <?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. Definir la función de acción al final, debe agregar un código para procesar la identificación de la imagen que pasaremos a la URL de enlace de actualización de datos.

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

Fuentes y sugerencias:

bueltge
fuente
¿Cuál sería el atributo 'página' para una página de administración, por ejemplo, Widgets.php?
AlxVallejo
Use el complemento Información de administrador actual y verá esta cadena, también todos los ganchos, que puede usar sobre esta página. En tu ejemplo lo es widgets.php.
bueltge
0

También puse una respuesta en el sitio stackoverflow.com y sería de gran ayuda.

Estoy usando este método para usar el cargador de medios en mi complemento personalizado. Quizás esto sea de ayuda.

en el archivo del tema principal (index.php) agregue estos.

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


En el archivo 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+"'/>");
}

archivo 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" />

Más detalles en mi blog

Más información http://webexplorar.com/how-to-use-media-uploader-in-wordpress-custom-plugin/

Sumith Harshan
fuente
Transfiera esa respuesta a su respuesta aquí. Si ese enlace se elimina, su respuesta aquí será inútil.
Pieter Goosen
Creo que la caja gruesa ahora en este momento es muy antigua.
Musa Haidari
0

Simplemente use este código para el cargador de medios. Tienes enlace en respuesta 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
fuente