WP Media Uploader在选项页面中仅加载一次

时间:2016-02-10 作者:Ayanize

一个奇怪的问题发生在我身上,我无法解决。在我的主题选项页面中,我添加了上载图像的选项,一个用于徽标,另一个用于背景图像。这是我的HTML

 <table class="form-table">
            <tr>
              <th scope="row"><?php _e(\'Logo Image\'); ?></th>
              <td><label for="logo_link">
                  <input id="image-url" type="text" name="logo_link" value="<?php echo get_option(\'logo_link\'); ?>" size="50" />
                    <input id="upload-button" class="button" type="button" value="Upload Image" />
                 </label>
             </td>
            </tr>
           <tr>
              <th scope="row"><?php _e(\'BG Image\'); ?></th>
              <td><label for="bg_image">
                  <input id="image-url" type="text" name="bg_image" value="<?php echo get_option(\'bg_image\'); ?>" size="50" />
                    <input id="upload-button" class="button" type="button" value="Upload Image" />
                 </label>
             </td>
            </tr>
            </table>

This how I enqueued the JS

function media_uploader_enqueue()
{
    wp_enqueue_media();
    wp_register_script(\'image-upload-js\', get_stylesheet_directory_uri(). \'/js/image-upload-js.js\', true, \'1.0.1\');
    wp_enqueue_script(\'image-upload-js\');
}
add_action(\'admin_enqueue_scripts\', \'media_uploader_enqueue\');
这是我在image-upload-js.js 文件

jQuery(document).ready(function($){

  var mediaUploader;

  $(\'#upload-button\').click(function(e) {
    e.preventDefault();

      if (mediaUploader) {
      mediaUploader.open();
      return;
    }

    mediaUploader = wp.media.frames.file_frame = wp.media({
      title: \'Choose Image\',
      button: {
      text: \'Choose Image\'
    }, multiple: false });


    mediaUploader.on(\'select\', function() {
      attachment = mediaUploader.state().get(\'selection\').first().toJSON();
      $(\'#image-url\').val(attachment.url);
    });

    mediaUploader.open();
  });

});

The annoying problem

媒体上载程序正在为打开Logo Image 字段,但不用于BG Image. 我还可以保存选项,一切都已设置好。如果我手动将URL放在BG图像文本字段中,它就是文件。只有媒体上传程序不适用于此。如果我移动HTML块,上载程序只会为第一个块打开。任何发生这种情况的原因。谢谢

1 个回复
SO网友:JonK

单击第二个按钮时,媒体上载程序未打开的原因是两个按钮的ID相同,您也将其绑定到打开上载程序的功能。元素ID应始终是唯一的,因此。click function listener仅在用户单击第一个按钮(=第一个id为=“图像url”)时检测。要解决此问题,请尝试为两个按钮分配一个公共类,并将媒体上载程序功能绑定到该类。

在为BG图像选择图像时,您将遇到相同的问题,因为您的两个外部输入也具有相同的ID(“图像url”),这意味着BG图像将分配给徽标图像。为了解决这个问题,可以使用jQuery树遍历函数来获取当前输入按钮的父级,并调用。该元素上的val(attachment.url)。