我想在WordPress 3.5之后在图库视图上增强媒体编辑器。
我想在右侧添加一个新的选择字段,并将选定的值发送到图库简码。 />

我认为,wp.media.gallery中的函数wp-includes/js/media-editor.js是插入图库简码的默认函数。

我想添加一个新参数,并且该参数的值来自媒体管理器内的选择字段。 ,但是Backbone对我来说是一个很新的东西,我不知道它是如何工作的。我也曾使用过钩子print_media_templates,但在Media视图中没有任何结果。

我应该使用哪些钩子?

#1 楼

一个很小的资源,也许是一个用于创建解决方案的插件。首先是php部分,媒体管理器中包含按钮的javascript。答案更有用,但创建了@One Trick Pony的答案,并给出了正确的方向和JS解决方案。

在图像上查看结果: >生成的简码,如果大小不是默认大小:队列中也有一个脚本,这里有附加控件的解决方案。

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


评论


太棒了!似乎WordPress开发正在以比核心开发人员更快的速度建立有关新媒体库的知识库;)而且,@ OneTrickPony再次揭示了他的另一个魔术技巧,对这两者均表示敬意!

–brasofilo
13年3月12日在11:52

太棒了后续问题:是否有一种简单的方法可以禁止简码中的默认属性?因此[gallery type =“ thumbnail” ids =“ 1,2”]变为[gallery ids =“ 1,2”]吗?我为插件添加了自定义属性,可以选择将图库转换成幻灯片。我只想显示一个普通的WP Gallery,便想隐藏该属性。因此,在停用插件时,它会减少工作量。

– kitchin
14-10-14在10:12

我认为这是添加有关此主题的新问题的更好方法。简码在此处的q / a之外。

– Bueltge
2014年10月14日15:52

好主意。 wordpress.stackexchange.com/questions/165369/…

– kitchin
2014年10月14日17:23

@bueltge,我可以请您在此处查看与自定义字段相关的问题:wordpress.stackexchange.com/questions/265852/…吗?

–艾斯提克·艾哈迈德(Istiaque Ahmed)
17年5月4日在19:59

#2 楼

如果您真的想使用Backbone模板,那么您的钩子是正确的。

我将使用jQuery插入HTML模板,而不是为Gallery Settings视图覆盖template()函数。但是我想您已经知道了,所以我将发布主干版本:

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

});