Лучший подход при изменении 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 /подобный. Приложение уже зависит от работы JavaScript, поэтому опыт не ухудшается. Это не похоже на правильный способ сделать это изменение. Кажется, что это противоречит духу как Backbone, так и WordPress.
Моим идеалом является то, что в шаблоне Backbone будет использоваться фильтр WordPress (возможно, это просто файл PHP), который позволит добавлять новые опции в это меню выбора.
Вне моего рассуждения, какой из этих вариантов лучше?
1 ответ
Это мой переход к фрагментам для таких вещей.
<?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
}); ?>