Migliora Media Manager per Galleria


29

Vorrei migliorare Media Editor, dopo WordPress 3.5, nella visualizzazione galleria.
Voglio aggiungere un nuovo campo di selezione sul lato destro e inviare i valori selezionati allo shortcode della galleria.

inserisci qui la descrizione dell'immagine

Penso che la funzione wp.media.galleryin wp-includes/js/media-editor.jssia la funzione predefinita per inserire lo shortcode della galleria.

Voglio aggiungere un nuovo parametro e i valori del parametro provengono dal campo di selezione all'interno di Media Manager.

Ho suonato con diverse fonti, soprattutto da questa domanda , ma Backbone è molto nuovo per me e non capisco come funzioni. Ho anche giocato con il gancio print_media_templates, ma nessun risultato nella vista Media.

Quali ganci dovrei usare?

Risposte:


21

Una piccola fonte, forse per un plugin per creare la soluzione. Inizialmente la parte php include il javascript per il pulsante all'interno di Media Manager. È la risposta più utilizzabile, ma la risposta di @One Trick Pony è stata creata e la giusta direzione e soluzione JS.

Vedi il risultato sull'immagine: inserisci qui la descrizione dell'immagine

Lo shortcode risultante, se la dimensione non è la dimensione predefinita: inserisci qui la descrizione dell'immagine

Hook print_media_templatesè il posto giusto per includere il pulsante, il markup. Inoltre è stato accodato uno script, c'è la soluzione per aggiungere i controlli.

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

La seguente fonte è il javascript, sull'esempio sorgente in php, il file 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 );

4
Bravo! Sembra che lo sviluppo di WordPress stia costruendo una base di conoscenza sulla nuova libreria multimediale a un ritmo più veloce rispetto agli sviluppatori principali;) E, in caso contrario, @OneTrickPony rivela ancora una volta un altro dei suoi trucchi con la borsa magica, complimenti a entrambi!
brasofilo,

Fantastico. Domanda di follow-up: esiste un modo semplice per sopprimere gli attributi predefiniti nello shortcode? Quindi [gallery type="thumbnail" ids="1,2"]diventa [gallery ids="1,2"]? Sto aggiungendo un attributo personalizzato per un plugin per trasformare facoltativamente la galleria in una presentazione. Vorrei sopprimere l'attributo quando sta solo dicendo di mostrare una normale WP Gallery. Quindi alla disattivazione del plugin, lascia meno cruft.
Kitchin,

Penso che sia un modo migliore per aggiungere una nuova domanda su questo argomento. Lo shortcode è fuori dalla q / a qui.
fusione


@bueltge, posso chiederti di dare un'occhiata a una domanda sul campo personalizzata qui: wordpress.stackexchange.com/questions/265852/… ?
Istiaque Ahmed,

19

Se vuoi davvero usare i modelli Backbone, il tuo hook è corretto.

Vorrei usare jQuery per inserire il modello HTML anziché sovrascrivere la template()funzione per la vista delle impostazioni della galleria. Ma suppongo che tu lo sappia già, quindi posterò la versione Backbone:

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

});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.