Intereting Posts
Фильтр для меню администрирования Nav Down Как изменить расположение wp-config.php в папку или 2 папки вверх? WordPress удалить фильтр wpautop не работает Пользовательский запрос поиска – включает только настраиваемые поля и заголовок статическая передняя страница ТОЛЬКО для определенных тем? подсчитывать сообщения от пользовательских таксономических условий по годам Как узнать, загружены ли все зарегистрированные файлы? Добавить пользовательское поле в поле комментариев ПОСЛЕ текстовой области НО ПЕРЕД отправкой кнопки Подкаталог Multisite hide Как переместить почтовый процесс в фоновый режим Ошибка загрузки изображения с помощью настраиваемого шаблона страницы в Internet Explorer Как быстро создать фиктивное меню? Не удается передать параметр «S» более двух букв Могу ли я использовать get_adjacent_post для определенных категорий? Формат короткого кода для пометки кота при публикации по электронной почте

Media Manager: обновить библиотеку после нового выбора

Я создал настраиваемое поле в метабокс с кнопкой, которая открывает медиа-менеджер и позволяет выбирать несколько изображений. В открывшемся событии галерея извлекает IDS изображений текущего сохраненного выделения из атрибута «идентификаторы данных» кнопки, которая запускает медиа-менеджер. Изображения отображаются правильно и уже выбраны.

Проблема заключается в том, что после того, как я снова открою медиа-менеджер и выберем новые изображения, хотя атрибут «идентификаторы данных» обновлен новыми идентификаторами вновь выбранных изображений, галерея не будет обновлять ранее выбранные изображения с новыми, если я сначала не сохраню настраиваемое поле. Что я делаю не так? Я не могу понять, как «обновить» выбор изображений. Может ли кто-нибудь понять это?

Это мой код

// Gallery Field Control var wppf_gallery_ids, wppf_get_gallery_list, wppf_get_gallery_field; GalleryControl = { // Initializes a new media manager or returns an existing frame. // @see wp.media.featuredImage.frame() frame: function() { if ( this._frame ) return this._frame; this._frame = wp.media({ title: 'something', library: { type: 'image' }, button: { text: 'something' }, multiple: 'toggle', }); this._frame.on( 'open', this.updateFrame ).state('library').on( 'select', this.select ); return this._frame; }, select: function() { var selection = GalleryControl._frame.state().get( "selection" ).toJSON(); var wppf_new_ids = ''; // Empty previous images jQuery(wppf_get_gallery_list).empty(); // Load all stuff up jQuery(selection).each(function(index) { jQuery(wppf_get_gallery_list).append('<li><input type="hidden" name="'+ wppf_get_gallery_field +'['+ index +'][id]" value="'+ this.id +'"><input type="hidden" name="'+ wppf_get_gallery_field +'['+ index +'][url]" value="'+ this.url +'"><img src="'+ this.url +'"/></li>'); wppf_new_ids += this.id + ','; }); // Remove last comma wppf_new_ids = wppf_new_ids.substr(0,wppf_new_ids.length-1); jQuery('#' + wppf_get_gallery_field).attr('data-ids',wppf_new_ids); }, updateFrame: function() { var selection = GalleryControl.frame().state().get('selection'); selection.reset(); // Grab all ids from gallery var all_ids = wppf_gallery_ids.split(','); // Add to selection if(all_ids !== '') { jQuery.each(all_ids, function(index, value) { var attachment = wp.media.attachment( value ); attachment.fetch(); selection.add( attachment ? [ attachment ] : [] ); }); } }, init: function() { // Handle media manager jQuery('body').on('click', '.wppf-open-gallery', function(e) { e.preventDefault(); // Get the gallery id and details wppf_get_gallery_field = jQuery(this).attr('id'); wppf_gallery_ids = jQuery(this).data('ids'); wppf_get_gallery_list = jQuery(this).data('list'); GalleryControl.frame().open(); }); } }; // Run Gallery Editor GalleryControl.init(); 

Кнопка, открывающая галерею, выглядит так:

 <a href="#" id="wppf-gallery-gallery" class="wppf-open-gallery button button-primary wppf-gallery" data-list="#wppf-gallery-thumbs-gallery" data-ids="597,596">Create Gallery</a> 

Когда я открываю галерею и добавляю 2 новых изображения, атрибут data-ids обновляется с новыми идентификаторами и выглядит так:

 <a href="#" id="wppf-gallery-gallery" class="wppf-open-gallery button button-primary wppf-gallery" data-list="#wppf-gallery-thumbs-gallery" data-ids="597,596,381,280">Create Gallery</a> 

Однако медиа-менеджер не будет «предварительно выбирать» 4 изображения, пока я не сохраню сообщение. Кто-нибудь знает, как решить эту проблему?

Спасибо.

Думаю, вы где-то скопировали этот код. Просто прочитав его, я не вижу wppf_gallery_ids установленного где-нибудь в стороне от функции init , а это значит, что он ничего не может обновить, поскольку проверка пуста. Я вижу два варианта: либо обновляйте его во время выбора внутри функции select , либо просто wppf_new_ids в массив wppf_gallery_ids .

Мне кажется, что обе переменные wppf_new_ids/_gallery_ids имеют практически такую ​​же функциональность, и их можно было отбросить.

Помимо этого, вы должны обернуть весь свой фрагмент кода в функцию самоисполнения и нажать на него глобальные переменные:

 ( function( $ ) { 'use strict'; // your code } )( jQuery || {} ); 

Это также означает, что вы можете использовать $ вместо jQuery .

Еще одна вещь, которую я бы избегал, – это загрязнение глобального пространства имен. Когда вы просто добавляете GalleryControl как вы, то у вас уже есть window.GalleryControl . window.GalleryControl . При таком родовом имени столкновение с другим кодом, скорее всего, произойдет вчера, чем завтра. Лучший стиль – использовать собственное, уже существующее пространство имен на объекте window : wppf . Это означает, что ваша окончательная оболочка может выглядеть так:

 ( function( $ ) { 'use strict'; var gallery; gallery.init = function() { // }; gallery.frame = function() { // }; gallery.select = function() { // }; gallery.updateFrame = function() { // }; window.wppf = window.wppf || {}; window.wppf.gallery = window.wppf.gallery || {}; window.wppf.gallery = new gallery(); } )( jQuery || {} ); 

Подробнее об этой теме в отличной статье о объектах JS .