Раздел администрирования для виджета визуализируется (на стороне сервера) один раз, после этого 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');
});
}
});
Это решает проблему, когда новые виджеты перетаскиваются в одну из областей виджетов, я все еще ищу надежный способ получить селектор, когда они впервые отображаются (на стороне сервера).