gallery – El mejor enfoque al modificar el Administrador de medios

Pregunta:

Estoy intentando editar el Administrador de medios para permitir la selección de una nueva opción en el campo de selección "Enlace a".

Esta plantilla Backbone está definida actualmente en media-template.php

<label class="setting">
    <span><?php _e('Link To'); ?></span>
        <select class="link-to"
            data-setting="link"
            <# if ( data.userSettings ) { #>
                data-user-setting="urlbutton"
            <# } #>>

            <option value="post" <# if ( ! wp.media.galleryDefaults.link || 'post' == wp.media.galleryDefaults.link ) {
                #>selected="selected"<# }
            #>>
                <?php esc_attr_e('Attachment Page'); ?>
            </option>
            <option value="file" <# if ( 'file' == wp.media.galleryDefaults.link ) { #>selected="selected"<# } #>>
                <?php esc_attr_e('Media File'); ?>
            </option>
            <option value="none" <# if ( 'none' == wp.media.galleryDefaults.link ) { #>selected="selected"<# } #>>
                <?php esc_attr_e('None'); ?>
            </option>
        </select>
    </label>

Podría copiar esta plantilla en mi complemento, hacer mis cambios y extender media.view.Settings.Gallery para agregar mi nueva funcionalidad, pero esto podría causar conflictos potenciales con otros complementos que también quieran modificar esta parte del administrador de medios.

media.view.Settings.Gallery = media.view.Settings.Gallery.extend({
    template: media.template('caffeine-gallery-settings'),

La alternativa es que agrego la nueva opción al menú de selección a través de jQuery / similar. La aplicación ya depende de JavaScript para funcionar, por lo que la experiencia no se degradará. Sin embargo, esta no parece la forma correcta de realizar este cambio. Parece que va en contra del espíritu de Backbone y WordPress.

Mi ideal es que haya un filtro de WordPress en la plantilla Backbone (factible ya que es solo un archivo PHP después de todo) que permitiría agregar nuevas opciones a este menú de selección.

Fuera de mi razonamiento, ¿cuál de estas opciones es la mejor?

Respuesta:

Este es mi fragmento de acceso para este tipo de cosas.

<?php add_action('print_media_templates', function(){

  // define your backbone template;
  // the "tmpl-" prefix is required,
  // and your input field should have a data-setting attribute
  // matching the shortcode name
  ?>
 <script type="text/html" id="tmpl-my-custom-gallery-setting">
   <label class="setting">
   <span><?php _e('My setting'); ?></span>
   <select data-setting="my_custom_attr">
     <option value="foo"> Foo </option>
     <option value="bar"> Bar </option>
     <option value="default_val"> Default Value </option>
    </select>
  </label>
</script>

 <script>

jQuery(document).ready(function(){

  // add your shortcode attribute and its default value to the
  // gallery settings list; $.extend should work as well...
  _.extend(wp.media.gallery.defaults, {
    my_custom_attr: 'default_val'
  });

  // merge default gallery settings template with yours
  wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({
    template: function(view){
      return wp.media.template('gallery-settings')(view)
           + wp.media.template('my-custom-gallery-setting')(view);
    }
  });

});

  </script>
  <?php

}); ?>

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım