Проблема с загрузкой картинки в свой виджет WordPress

272
04 ноября 2017, 14:21

Я делаю свой плагин с виджетом, в котором должна загружаться картинка. Вот часть кода для кнопки загрузки в самом виджете:

... <p>
    <label for="<?php echo $this->get_field_id('photo'); ?>">Photo URL:</label>
    <input class="widefat image_hso" type="text" name="<?php echo $this->get_field_name('photo'); ?>" id="<?php echo $this->get_field_id('photo'); ?>" value="<?php echo $photo ;?>">
    </p>
    <p>
    <button class="image_upload_hso widefat">Select Image</button>
    </p> ... 

Вот код PHP ниже:

function photo_upload_option($hook) {
        if( $hook != 'widgets.php' ) 
            return;
        //enque Javasript Media API
        wp_enqueue_media();
        wp_enqueue_script( 'uploadphoto', plugin_dir_url( __FILE__ ) . 'js/upload_image.js');
}

function register_plugin_styles() {
    wp_register_style( 'hso', plugin_dir_url( __FILE__ ) . 'css/style.css' );
    wp_enqueue_style( 'hso' );
}
// register widget
add_action('admin_enqueue_scripts', 'photo_upload_option'); 
add_action('widgets_init', create_function('', 'return register_widget("wp_hso_plugin");'));
add_action( 'wp_enqueue_scripts', 'register_plugin_styles' );

И код файла обработчика JS:

jQuery(function($){
  var frame,
      addImgLink = $('.image_upload_hso'),
      imgIdInput = $('.image_hso');
  addImgLink.on( 'click', function( event ){
    event.preventDefault();
    if ( frame ) {
      frame.open();
      return;
    }
    frame = wp.media({
      title: 'Select or Upload Image',
      button: {
        text: 'Use this Image'
      },
      multiple: false
    });
    frame.on( 'select', function() {
      var attachment = frame.state().get('selection').first().toJSON();
      imgIdInput.val( attachment.url );
    });
    frame.open();
  });});

Сама проблема: я добавляю виджет в сайдбар, например, захожу в настройки, нажимаю "Select image" и получаю перезагрузку страницы. После этого опять открываю настройки виджета и опять нажимаю выбор картинки и уже медиа библиотека открывается нормально, далее выбираю картинку и сохраняю выбор - ссылку на картинку вытягиваю в свой input и все ок. Нажимаю в виджете Save и все ок, сохраняет, все работает. Но если я сразу опять нажму "Select image" - опять получаю перезагрузку страницы после которой опять нормально открывает медиа библиотека. Что не так?

READ ALSO
Как выключить фоновый scrolling при открытии модального окна?

Как выключить фоновый scrolling при открытии модального окна?

Как выключить фоновый scrolling при открытии модального окна на css или js?

363
Баг svg в мобильном safari

Баг svg в мобильном safari

У меня есть три страницы с одинаковым header(сделан blade-шаблоном Laravel) с svg-иконкой и кнопкой менюС главной страницы можно перейти на две другие

259
Ссылка на почту

Ссылка на почту

Как можно сделать ссылку на почту, что б при нажатии на нее, открывалась страница почты, а имеено на страницу "написать /отправить письмо",...

376
Настраивал 404-ю ошибку сайта. Как создать &ldquo;.htaccess&rdquo; файл?

Настраивал 404-ю ошибку сайта. Как создать “.htaccess” файл?

В интернете нашел, что настройка 404-й страницы происходит с помощьюhtaccess - файла

261