Уникальный селектор виджетов WordPress в админ-панели - PullRequest
0 голосов
/ 07 мая 2018

Раздел администрирования для виджета визуализируется (на стороне сервера) один раз, после этого WordPress дублирует этот фрагмент HTML, например, в раздел нижнего колонтитула.

Возможно, сделав что-то вроде этого:

document.getElementById('widget-selector').innerHTML = '<div>My admin HTML</div>';

Уникальные атрибуты идентификатора, сгенерированные на стороне сервера, теперь дублируются, и мой интерфейс сильно зависит от JavaScript (jQuery), настройки, например, обработчиков щелчков для определенных элементов в моем разделе администратора, не работают.

Я мог бы использовать: $('selector').last();, но я не уверен, что это надежный метод, поскольку он не всегда является последним элементом с этим селектором.

Любые идеи или предложения о том, как получить правильные селекторы?

Надеюсь, я достаточно подробно изложил, дайте мне знать, если я что-то упустил, и я отредактирую свой вопрос.

EDIT

После просмотра более подробной информации о StackOverflow и документации WordPress WordPress генерирует следующее событие: widget-added всякий раз, когда виджет сбрасывается в один из разделов виджета, вот пример кода.

$(document).on('widget-added', function(event, widget){
    const widgetId = $(widget).attr('id');
    /**
     * widgetId is something like widget-8_my-plugin-name-widget-7, 
     * inside that element is your widgets HTML, so check if this is your plugin
     */
    if (widgetId.match(/my-plugin-name/)) {
        /** 
        * i have a button with class .my-button somewhere in the widget
        * so make the following selector: #widget-8_my-plugin-name-widget-7 .my-button
        */ 
        $('#' + widgetId + ' .my-button').on('click', function() {
            console.log('test');
        });
    }
}); 

Это решает проблему, когда новые виджеты перетаскиваются в одну из областей виджетов, я все еще ищу надежный способ получить селектор, когда они впервые отображаются (на стороне сервера).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...