如何创建自定义图片上传字段或者小工具完整教程(解决无法弹出选择框、update按钮不显示等问题)

Published
2023-08-05
浏览次数 :  81

自定义小工具里面就修改两个地方,一个是widget函数,一个是form函数,form函数是后台上传的地方,

 public function form($instance) {
        $title = !empty($instance['menu_title']) ? $instance['menu_title'] : '';
        $image_url = !empty($instance['image_url']) ? $instance['image_url'] : '';
        ?>
        <p>
            <label for="<?php echo $this->get_field_id('menu_title'); ?>"><?php _e('Title:'); ?></label>
            <input class="widefat" id="<?php echo $this->get_field_id('menu_title'); ?>"
                   name="<?php echo $this->get_field_name('menu_title'); ?>" type="text"
                   value="<?php echo esc_attr($title); ?>"/>
        </p>
        <p>
            <label for="<?php echo $this->get_field_id('image_url'); ?>"><?php _e('Image:'); ?></label>
            <input class="widefat custom_image_widget_upload"
                   id="<?php echo $this->get_field_id('image_url'); ?>"
                   name="<?php echo $this->get_field_name('image_url'); ?>" type="text"
                   value="<?php echo esc_attr($image_url); ?>"/>
            <button class="button custom_image_widget_upload_button" data-target="<?php echo $this->get_field_id('image_url'); ?>"><?php _e('Upload Image'); ?></button>
        </p>
        
        <?php
    }

记住这个按钮和input的class或者id。

然后用Js操作, 因为widget这个东西有点延迟,加载的情况有点特殊,要用到Js的话,要先加载到admin footer, 如果是字段的话正常用admin_enqueue_script加载就可以:

// Enqueue media uploader script
function enqueue_custom_image_widget_scripts() {
  wp_enqueue_media();
  ?>
  <script>
    jQuery(document).ready(($) => {
    console.log('oolooo');
    $('#widgets-editor').on('click', '.custom_image_widget_upload_button', function (e) {
        e.preventDefault();
        
        var button = $(this),
            custom_uploader = wp.media({
                title: 'Choose Image',
                library: {
                    type: 'image'
                },
                button: {
                    text: 'Select Image'
                },
                multiple: false
            }).on('select', function () {
                var attachment = custom_uploader.state().get('selection').first().toJSON();
                $('#widget-tr_qrcode_widget-4-image_url').val(attachment.url);

                $('#widget-tr_qrcode_widget-4-image_url').trigger('change');


            }).open();
    });

    

});
  </script>

  <?php 
   
}
add_action('admin_footer', 'enqueue_custom_image_widget_scripts');

要注意js之前要添加 wp_enqueue_media();

如果当你上传图片并且更改了Input的值的时候,update这个更新按钮不显示, 那是因为图片上传之后不会触发wp的更改或者保存的动作,只要手动添加一个触发就好: $(‘#widget-tr_qrcode_widget-4-image_url’).trigger(‘change’);


Top