Cách tiếp cận tốt nhất khi sửa đổi Trình quản lý phương tiện


7

Tôi đang cố gắng chỉnh sửa Trình quản lý phương tiện để cho phép lựa chọn tùy chọn mới trong trường chọn "Liên kết đến".

Mẫu xương sống này hiện được định nghĩa trong 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>

Tôi có thể sao chép mẫu này vào plugin của mình, thực hiện các thay đổi và mở rộng media.view.Settings.Galleryđể thêm chức năng mới nhưng điều này có thể gây ra xung đột tiềm ẩn với các plugin khác cũng muốn sửa đổi phần này của trình quản lý phương tiện.

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

Thay thế là, tôi thêm tùy chọn mới vào menu chọn thông qua jQuery / tương tự. Ứng dụng đã phụ thuộc vào JavaScript để hoạt động để trải nghiệm không bị suy giảm. Điều này không giống như cách chính xác để thực hiện thay đổi này mặc dù. Cảm giác như nó đi ngược lại tinh thần của cả Backbone và WordPress.

Lý tưởng của tôi là sẽ có bộ lọc WordPress trong mẫu Backbone (có thể thực hiện được vì nó chỉ là một tệp PHP) sẽ cho phép các tùy chọn mới được thêm vào menu chọn này.

Ngoài lý luận của tôi, lựa chọn nào trong số này là tốt nhất?

Câu trả lời:


2

Đây là đoạn trích của tôi cho những thứ như thế này.

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

}); ?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.