J'essaie d'étendre cette réponse en permettant de changer les attributs de shortcode depuis l'interface utilisateur et de modifier le balisage de la galerie en fonction de ces attributs.
[gallery owl="true" link="none" size="medium" ids="378,377,376,375,374,373"]
Dans ce cas, si owl
est défini sur true
, un Owl Carousel serait rendu à la place de la galerie - ce qui est le cas. Mais comme tout code abrégé, vous devez vous rappeler les attributs appropriés. Voyant que je souhaite également pouvoir échanger des carrousels pour indiquer iDangerous Swiper , l'attribut owl
est limité et difficile à mémoriser en fonction des fonctionnalités prises en charge.
Heureusement pour moi, j'ai trouvé un extrait pour ajouter des ~ champs personnalisés ~ à la galerie en utilisant ce sample .
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
});
Malheureusement, le poste a plus de 2 ans et est fermé.
Lechallengeest: si je remplace la vue du modèle par mes paramètres, il est impossible d'étendre les paramètres définis à partir d'un autre plugin ou thème. La dernière vue définie comme template:
est toujours gagnante.
Lequestion: Comment puis-je coder ceci pour permettre une plus grande flexibilité, où non seulement mes paramètres sont affichés, mais je ne bloque pas non plus la possibilité d’autres modifications de plugins/thèmes?
Il semble que les modèles vivent sous forme de script
<script type="text/html" id="tmpl-my-custom-gallery-setting">
Pour rendre le modèle ci-dessus, il faudrait
wp.media.template('my-custom-gallery-setting')(view)
Comme nous remplaçons la logique template:
, il ne reste plus qu'à stocker une liste d'ID de modèles.
if (!wp.media.gallery.templates) wp.media.gallery.templates = ['gallery-settings'];
wp.media.gallery.templates.Push('my-custom-gallery-setting');
Puis parcourez toutes les vues disponibles
wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({
template: function (view) {
var output = '';
for (var i in wp.media.gallery.templates) {
output += wp.media.template(wp.media.gallery.templates[i])(view);
}
return output;
}
});
RÉSULTAT
Le client n'a donc plus besoin de se rappeler des attributs de code court pour modifier la galerie, car toutes les options ont été ajoutées à l'interface utilisateur sous forme de listes déroulantes.
[gallery link="none" type="owl" shape="square" ids="7228,7227,7226,7128,7127"]
En prime, la liste des types pris en charge est passée à travers un filtre afin que vous puissiez ajouter ou réduire le nombre de choix d'une source tierce.
LOCATION A
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
$gallery_types = apply_filters('print_media_templates_gallery_settings_types',
array(
'swiper' => ' Swiper',
'owl' => ' Owl Carousel',
'revolution' => ' Revolution Slider',
'default_val' => ' Default'));
?>
<script type="text/html" id="tmpl-custom-gallery-type-setting">
<label class="setting">
<span><?php _e('Layout Type'); ?></span>
<select data-setting="type"><?php
foreach($gallery_types as $key => $value) {
echo "<option value=\"$key\">$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, {
type: 'default_val'
});
// join default gallery settings template with yours -- store in list
if (!wp.media.gallery.templates) wp.media.gallery.templates = ['gallery-settings'];
wp.media.gallery.templates.Push('custom-gallery-type-setting');
// loop through list -- allowing for other templates/settings
wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({
template: function (view) {
var output = '';
for (var i in wp.media.gallery.templates) {
output += wp.media.template(wp.media.gallery.templates[i])(view);
}
return output;
}
});
});
</script>
<?php
});
LOCATION B
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
$gallery_types = apply_filters('print_media_templates_gallery_settings_shapes',
array(
'circle' => ' Circle',
'rectangle' => ' Rectangle',
'square' => ' Square',
'default_val' => ' Default'));
?>
<script type="text/html" id="tmpl-custom-gallery-shapes">
<label class="setting">
<span><?php _e('Shapes'); ?></span>
<select data-setting="shape"><?php
foreach($gallery_types as $key => $value) {
echo "<option value=\"$key\">$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, {
shape: 'default_val'
});
// join default gallery settings template with yours -- store in list
if (!wp.media.gallery.templates) wp.media.gallery.templates = ['gallery-settings'];
wp.media.gallery.templates.Push('custom-gallery-shapes');
// loop through list -- allowing for other templates/settings
wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({
template: function (view) {
var output = '';
for (var i in wp.media.gallery.templates) {
output += wp.media.template(wp.media.gallery.templates[i])(view);
}
return output;
}
});
});
</script>
<?php
});