Подключитесь к backbone, чтобы добавить js в wp-admin -> медиабиблиотека?

Вопрос или проблема

Я подключил файл .js на странице “Медиа Библиотека” (upload.php). Мне нужно скрыть и изменить несколько миниатюр на странице, используя только JS (я не ищу обходные пути).

Элементы на странице отображаются с помощью Backbone, и я пока не нашел способа подключиться к этому. В любом состоянии окна/документа функция $(‘li.attachment’).hide(), например, не выполняет свою работу из-за этого.

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

window.wp = window.wp || {};

( function( $, _ ) {

var media = wp.media,
    Attachments = media.model.Attachments,
    Query = media.model.Query,
    original = {};

original.AttachmentsBrowser = {
    manipulate: media.view.AttachmentsBrowser.prototype.manipulate
};

_.extend( media.view.AttachmentsBrowser.prototype, {

    initialize: function() {

        original.AttachmentsBrowser.initialize.apply( this, arguments );
    },

    manipulate: function() {
        var options = this.options,
            self = this,
            i = 1;

        original.AttachmentsBrowser.manipulate.apply( this, arguments );

        console.log('got here');  // Ничего не выводит
    }
});    

Есть идеи, как мне поступить?

Большое спасибо заранее!

Вы можете подключать файлы javascript и css для wp admin следующим образом:

    function load_custom_wp_admin_style() {
        wp_enqueue_script( 'script-name','js/scripts.js', array('jquery'), '3.3.5', true );
}
add_action( 'admin_enqueue_scripts', 'load_custom_wp_admin_style' );

Сначала вам нужно подключить админские скрипты следующим образом:

 function my_admin_scripts() {
wp_enqueue_script('media-upload');
wp_enqueue_script('thickbox');
}

function my_admin_styles() {
wp_enqueue_style('thickbox');
}

для загрузки вложения:

 $('.upload_image_button').live('click',function() {
         formfield = $('#upload_image').attr('name');
         tb_show('', 'media-upload.php?type=image&TB_iframe=true');
         return false;
        });

         window.send_to_editor = function(html) {
         imgurl = $('img',html).attr('src');
         tb_remove();
        }

Я использовал свой код, вы можете изменить его.

Спасибо

Я работаю над чем-то подобным. Я выбирал миниатюры (с помощью jQuery), как в приведенном ниже примере кода. Воспользуйтесь функцией on jQuery, чтобы подключать функции к интерактивным элементам (например, миниатюрам).

// Редактировать
Код ниже выведет ID вложения в вашем консоли.

(function ($) {
    'use strict';

    // Ждем загрузки окна
    $(window).load(function () {

        // Выполняем функцию 'checkImageSelection' после нажатия на .thumbnail
        $('.attachments-browser').on('click', '.thumbnail', checkImageSelection);

        // Функция для проверки выбранного изображения
        function checkImageSelection() {

            // Получаем ID изображения
            var imageID = $(this).parents('.attachment').attr('data-id');

            // Выводим ID изображения в консоль
            console.log(imageID);

        }

    });

})(jQuery);

Ответ или решение

Чтобы добавить JavaScript в область администрирования WordPress, а именно, в библиотеку медиа, необходимо учитывать, что многие элементы на этой странице рендерятся с использованием Backbone.js. Это предполагает, что обычные методы, такие как использование jQuery для манипуляций с элементами, могут не сработать, так как DOM-элементы могут динамически создаваться и удаляться.

Вот пошаговое руководство по подключению и манипулированию элементами в библиотеке медиа с использованием JavaScript:

1. Подключение вашего скрипта

Сначала убедитесь, что вы корректно подключили свой JavaScript-файл. Для этого используй функцию admin_enqueue_scripts. Пример кода:

function load_custom_wp_admin_scripts() {
    // Подключаем библиотеку медиа
    wp_enqueue_media();

    // Подключаем ваш скрипт
    wp_enqueue_script('custom-media-script', get_template_directory_uri() . '/js/custom-media-script.js', array('jquery'), null, true);
}
add_action('admin_enqueue_scripts', 'load_custom_wp_admin_scripts');

2. Использование Backbone для манипуляции с элементами

Чтобы взаимодействовать с компонентами, созданными с помощью Backbone.js, вам нужно отслеживать события и переопределять методы, связанные с моделью или представлением медиа. Вот пример кода, который покажет, как можно это сделать:

(function($) {
    'use strict';

    // Проверяем, что необходимая библиотека готова
    $(document).ready(function() {
        var mediaView = wp.media.view.AttachmentsBrowser;

        // Переопределяем метод "manipulate"
        mediaView.prototype.manipulate = function() {
            // Вызываем оригинальную функцию
            mediaView.prototype.manipulate.apply(this, arguments);

            // Здесь мы можем скрыть или изменить элементы
            // Например, скрытие всех миниатюр с классом "example-class"
            this.$el.find('li.attachment.example-class').hide();
        };

        // Создадим экземпляр AttachmentsBrowser, чтобы подключить изменения
        var attachmentsBrowser = new mediaView({
            // ваши настройки здесь
        });
    });

})(jQuery);

3. Активное использование событий

Чтобы отслеживать клики по миниатюрам и реагировать на них, вы можете использовать метод .on() jQuery, что позволит вам динамически подключать обработчики событий:

$(document).on('click', '.attachments-browser .thumbnail', function() {
    var $thumbnail = $(this);
    var imageID = $thumbnail.closest('.attachment').data('id');

    console.log(imageID); // выводим ID в консоль
});

4. Параметры и настройки

Не забудьте передать необходимые параметры в свой экземпляр AttachmentsBrowser, если они необходимы. Это могут быть такие параметры, как количество отображаемых элементов, ограничения на типы загружаемых медиа и т.д.

Заключение

Этот подход позволит вам эффективно манипулировать миниатюрами в медиа библиотеке WordPress, обеспечивая стабильную работу с элементами, созданными на основе Backbone.js. Убедитесь, что у вас нет конфликтов с другими подключенными скриптами и что вы тестируете свою реализацию в различных браузерах для обеспечения кроссбраузерной совместимости.

Оцените материал
Добавить комментарий

Капча загружается...