Galeri için Medya Yöneticisini Geliştirin


29

Media Editor’ü WordPress 3.5’ten sonra galeri görünümünde geliştirmek istiyorum.
Sağ tarafa yeni bir seçim alanı eklemek ve seçilen değerleri galeri kısa koduna göndermek istiyorum.

görüntü tanımını buraya girin

Bence, fonksiyon wp.media.galleryiçinde wp-includes/js/media-editor.jsgaleri shortcode eklemek için varsayılan fonksiyonudur.

Yeni bir parametre eklemek istiyorum ve parametrenin değerleri Media Manager içindeki seçim alanından geliyor.

Özellikle bu sorudan farklı kaynaklarla oynadım , ancak Omurga benim için çok yeni ve nasıl çalıştığını anlamıyorum. Kanca ile de oynamıştım print_media_templates, ancak Medya görünümünde sonuç alamadım.

Hangi kancaları kullanmalıyım?

Yanıtlar:


21

Çözüm oluşturmak için bir eklenti için küçük bir kaynak. İlk başta php kısmı, Media Manager içindeki buton için javascript içeriyor. Daha kullanışlı bir cevap, ancak @ Bir Trick Pony'in cevabı yaratıldı ve doğru yön ve JS çözümü oldu.

Resmin sonucuna bakın: görüntü tanımını buraya girin

Ortaya çıkan kısa kod, boyut varsayılan boyutta değilse: görüntü tanımını buraya girin

Kanca print_media_templates, düğme, işaretleme dahil etmek için doğru yerdir. Ayrıca bir betik hazırladı, kontrolleri eklemek için bir çözümü vardı.

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

İzleyen kaynak, javascript, php'deki örnek kaynaktaki dosyadır. 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! WordPress Development'ın yeni Medya Kütüphanesi hakkında temel geliştiricilere göre daha hızlı bir bilgi tabanı oluşturduğu görülüyor ;
brasofilo

Fantastik. Takip eden soru: Kısa koddaki varsayılan özellikleri gizlemenin kolay bir yolu var mı? Peki [gallery type="thumbnail" ids="1,2"]olur [gallery ids="1,2"]mu? İsteğe bağlı olarak galeriyi slayt gösterisine dönüştürmek için bir eklenti için özel bir özellik ekliyorum. Normal bir WP Galerisi göstermeyi söylerken bu özelliği gizlemek isterdim. Böylece eklentinin devre dışı bırakılmasından sonra daha az zalimce kalıyor.
kitchin

Bu konu hakkında yeni bir soru eklemek için daha iyi bir yol olduğunu düşünüyorum. Kısa kod burada q / a'nın dışında.
bueltge,


@bueltge, burada özel bir alana ilişkin soruya bir göz atmanızı isteyebilir miyim: wordpress.stackexchange.com/questions/265852/… ?
Istiaque Ahmed,

19

Omurga şablonlarını gerçekten kullanmak istiyorsanız, kancanız doğrudur.

template()Galeri ayarları görünümü işlevini geçersiz kılmak yerine HTML şablonunu eklemek için jQuery'i kullanırdım . Ama sanırım bunu zaten biliyorsun, bu yüzden Omurga versiyonunu göndereceğim:

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

});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.