web-dev-qa-db-fra.com

Meilleure approche lors de la modification du Media Manager

J'essaie de modifier le Gestionnaire de médias pour permettre la sélection d'une nouvelle option dans le champ de sélection "Lien vers".

Ce modèle de backbone est actuellement défini dans 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>

Je pourrais copier ce modèle dans mon plug-in, apporter mes modifications et étendre media.view.Settings.Gallery pour ajouter de nouvelles fonctionnalités, mais cela pourrait entraîner des conflits avec d'autres plug-ins souhaitant également modifier cette partie du gestionnaire de médias.

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

L’alternative est que j’ajoute la nouvelle option au menu de sélection via jQuery/similaire. L'application dépend déjà de JavaScript pour que l'expérience ne se dégrade pas. Cela ne semble pas être la bonne façon de procéder à ce changement. On a l'impression que cela va à l'encontre de l'esprit de Backbone et de WordPress.

Mon idéal est qu’il y ait un filtre WordPress dans le modèle Backbone (faisable car c’est juste un fichier PHP après tout) qui permettrait d’ajouter de nouvelles options à ce menu de sélection.

En dehors de mon raisonnement, laquelle de ces options est la meilleure?

7
Stewarty

Ceci est mon go to snippet pour des choses comme ça.

<?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

}); ?>
2
tonymazz