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?
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
}); ?>