Małe źródło, być może wtyczka do stworzenia rozwiązania. Na początku część php zawiera javascript dla przycisku wewnątrz Media Managera. Jest bardziej użyteczną odpowiedzią, ale odpowiedź @One Trick Pony została stworzona, a właściwy kierunek i rozwiązanie JS.
Zobacz wynik na obrazku:
Wynikowy kod krótki, jeśli rozmiar nie jest domyślny:
Hak print_media_templates
to właściwe miejsce na włączenie przycisku, znaczników. Został także skolejkowany skrypt, istnieje rozwiązanie do dodania kontrolek.
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 );
Następującym źródłem jest javascript, na przykładowym źródle pliku php, plik 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"]
staje[gallery ids="1,2"]
? Dodaję niestandardowy atrybut wtyczki, aby opcjonalnie zmienić galerię w pokaz slajdów. Chciałbym ukryć ten atrybut, gdy mówi tylko o pokazaniu normalnej galerii WP. Więc po dezaktywacji wtyczki pozostawia mniej cruft.Jeśli naprawdę chcesz używać szablonów kręgosłupa, Twój hak jest poprawny.
Używałbym jQuery do wstawienia szablonu HTML zamiast zastępowania
template()
funkcji widoku ustawień galerii. Ale chyba już to wiesz, więc opublikuję wersję Backbone:źródło