Bester Ansatz beim Ändern des Media Managers

7

Ich versuche, den Medienmanager zu bearbeiten, um die Auswahl einer neuen Option im Auswahlfeld "Link zu" zu ermöglichen.

Diese Backbone-Vorlage ist derzeit in media-template.php definiert

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

Ich könnte diese Vorlage in mein Plugin kopieren, meine Änderungen vornehmen und erweitern media.view.Settings.Gallery, um meine neue Funktionalität hinzuzufügen. Dies könnte jedoch zu potenziellen Konflikten mit anderen Plugins führen, die diesen Teil des Medienmanagers ebenfalls ändern möchten.

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

Die Alternative ist, dass ich die neue Option über jQuery / like zum Auswahlmenü hinzufüge. Die App ist bereits auf JavaScript angewiesen, damit die Erfahrung nicht beeinträchtigt wird. Dies scheint jedoch nicht der richtige Weg zu sein, um diese Änderung vorzunehmen. Es fühlt sich an, als würde es gegen den Geist von Backbone und WordPress verstoßen.

Mein Ideal ist, dass die Backbone-Vorlage einen WordPress-Filter enthält (machbar, da es sich immerhin nur um eine PHP-Datei handelt), mit dem diesem Auswahlmenü neue Optionen hinzugefügt werden können.

Welche dieser Optionen ist außerhalb meiner Überlegungen die beste?

Stewarty
quelle

Antworten:

2

Dies ist mein Go-to-Snippet für solche Dinge.

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

}); ?>
Tonymazz
quelle