WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Как переключить вкладку и перезагрузить фрейм wp.media.frame?

Была поставлена задача создать расширение под элементор для загрзуки картинок из ресурса brandfolder. В итоге лучшим решением посчитали расширить не виджеты элементора, а расширить wp medialibrary.

Идея такая добавить кнопку в модальное окно медибиблиотеки

По клику на кнопку всплавает модалка и по апи подгружаются превью картинок, пользователь выбирает нужную картинку, жмет вставить.

Дальше загружаем картину, создаем посттайп attachment и кладем в соответствующую директорию в файловой системе.

После этого, когда картинка находится в системе на фронте остается:

  • закрыть модалку
  • переключить активную вкладку на Media Library
  • перезагрузить фрейм, чтобы картинка которую мы загрузили, отобразилась и её можно было выбрать

Но с последними двумя пунктами проблема и я не могу понять как это сделать. Я обыскал весь интернет, нашел несколько вариантов, но ни один из них не сработал. Подскажите как можно перезагрузить активный открытый фрейм?

Доступен объект:

wp.media.frame

можно закрыть например активный фрейм

wp.media.frame.close()

или получить выбранную картинку

wp.media.frame.state().get('selection').first()

но вот как переключить вкладку и перезагрузить фрейм я не могу понять.

Нашел пару решений:
В первом свойство collection undefined предполагаю оно было бы доступно если бы мы открывали фрейм в теле поста с открытым редактором, но здесь открывается фрейм в элементор редакторе

wp.media.frame.content.get().collection.props.set({ignore: (+ new Date())});

Так же во втором, свойство library == undefined

wp.media.frame.library.props.set({ignore: (+ new Date())});
0
Павел
1 месяц назад 3
  • 0
    Kama8394

    Я думаю, чем разбираться в устройстве, проще вставить костыль в виде прямого воздействия на элементы DOM в JS.

    Например, чтобы переключить вкладку найди событие клика и trigger его через JS на элементе вкладки. Чтобы перезагрузить окно, там вроде был метод destroy для wp.media.frame (или удали DOM элемент этого окна) и через JS кликни на кнопку открытия модалки (оно по идее должно снова подгрузиться).

    Вот еще по теме - есть frame.open();

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация