web-dev-qa-db-ja.com

Media Managerを変更するときの最善の方法

[リンク先]選択フィールドで新しいオプションを選択できるように、Media Managerを編集しようとしています。

このバックボーンテンプレートは現在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>

このテンプレートを自分のプラグインにコピーして変更し、media.view.Settings.Galleryを拡張して新しい機能を追加することができましたが、これはメディアマネージャのこの部分を変更したい他のプラグインと競合する可能性があります。

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

代わりの方法は、jQuery/similarを使ってselectメニューに新しいオプションを追加することです。このアプリはすでにJavaScriptに依存しているため、操作性は低下しません。しかし、これはこの変更を加える正しい方法のようには感じません。 BackboneとWordPressの両方の精神に反するように感じます。

私の理想は、BackboneテンプレートにWordPressフィルタがあることです(結局のところPHPファイルであるため可能です)、この選択メニューに新しいオプションを追加することができます。

私の推論の外では、これらの選択肢のうちどれが一番良いのでしょうか?

7
Stewarty

これは私がこのようなことをスニペットにすることです。

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