Небольшой источник, возможно, для плагина для создания решения. Сначала часть php включает в себя javascript для кнопки внутри Media Manager. Это более пригодный для использования ответ, но ответ @One Trick Pony заключался в создании и правильном направлении, и JS-решении.
Смотрите результат на картинке:
Результирующий шорткод, если размер не по умолчанию размер:
Крюк print_media_templates
является правильным местом для включения кнопки, разметки. Также был поставлен в очередь скрипт, есть решение для добавления элементов управления.
class Custom_Gallery_Setting {
/**
* Stores the class instance.
*
* @var Custom_Gallery_Setting
*/
private static $instance = null;
/**
* Returns the instance of this class.
*
* It's a singleton class.
*
* @return Custom_Gallery_Setting The instance
*/
public static function get_instance() {
if ( ! self::$instance )
self::$instance = new self;
return self::$instance;
}
/**
* Initialises the plugin.
*/
public function init_plugin() {
$this->init_hooks();
}
/**
* Initialises the WP actions.
* - admin_print_scripts
*/
private function init_hooks() {
add_action( 'wp_enqueue_media', array( $this, 'wp_enqueue_media' ) );
add_action( 'print_media_templates', array( $this, 'print_media_templates' ) );
}
/**
* Enqueues the script.
*/
public function wp_enqueue_media() {
if ( ! isset( get_current_screen()->id ) || get_current_screen()->base != 'post' )
return;
wp_enqueue_script(
'custom-gallery-settings',
plugins_url( 'js/custom-gallery-setting.js', __FILE__ ),
array( 'media-views' )
);
}
/**
* Outputs the view template with the custom setting.
*/
public function print_media_templates() {
if ( ! isset( get_current_screen()->id ) || get_current_screen()->base != 'post' )
return;
?>
<script type="text/html" id="tmpl-custom-gallery-setting">
<label class="setting">
<span>Size</span>
<select class="type" name="size" data-setting="size">
<?php
$sizes = apply_filters( 'image_size_names_choose', array(
'thumbnail' => __( 'Thumbnail' ),
'medium' => __( 'Medium' ),
'large' => __( 'Large' ),
'full' => __( 'Full Size' ),
) );
foreach ( $sizes as $value => $name ) { ?>
<option value="<?php echo esc_attr( $value ); ?>" <?php selected( $value, 'thumbnail' ); ?>>
<?php echo esc_html( $name ); ?>
</option>
<?php } ?>
</select>
</label>
</script>
<?php
}
}
// Put your hands up...
add_action( 'admin_init', array( Custom_Gallery_Setting::get_instance(), 'init_plugin' ), 20 );
Следующим источником является javascript, на примере источника в php, файл custom-gallery-setting.js
/**
* Custom Gallery Setting
*/
( function( $ ) {
var media = wp.media;
// Wrap the render() function to append controls
media.view.Settings.Gallery = media.view.Settings.Gallery.extend({
render: function() {
media.view.Settings.prototype.render.apply( this, arguments );
// Append the custom template
this.$el.append( media.template( 'custom-gallery-setting' ) );
// Save the setting
media.gallery.defaults.size = 'thumbnail';
this.update.apply( this, ['size'] );
return this;
}
} );
} )( jQuery );
[gallery type="thumbnail" ids="1,2"]
становится[gallery ids="1,2"]
? Я добавляю пользовательский атрибут для плагина, чтобы при желании превратить галерею в слайд-шоу. Я хотел бы подавить атрибут, когда он просто говорит, чтобы показать нормальную галерею WP. Таким образом, при деактивации плагина он оставляет меньше бесполезных действий.Если вы действительно хотите использовать шаблоны Backbone, то ваш хук правильный.
Я бы использовал jQuery для вставки шаблона HTML, а не переопределял
template()
функцию для представления настроек галереи. Но я думаю, вы уже это знаете, поэтому я опубликую версию Backbone:источник