Intereting Posts
Отключить сообщения электронной почты для комментариев для авторов Переменные и память WordPress Страницы с разбивкой по страницам, категориям, архиву и тегам не работают Получить сообщения из пользовательского сообщения Тип конкретной категории? Не удается подключиться к шаблону пользовательского типа post: is_page () условно? Как удалить эту функцию с домашней страницы? Многопользовательская среда вызывает проблемы в WordPress Как отредактировать макет определенного почтового формата? Хостинг нескольких сайтов WordPress на одном сервере – лучшие практики? Есть ли способ нажимать javascript или css на странице в шаблоне через функции.php Использование «Добавить с сервера» для загрузки по идентификатору сообщения Как использовать SMTP-настройки «phpmailer_init» только для определенных действий «wp_mail»? Пользовательский поиск WordPress – разбиение на страницы WP REST api возвращает бессмысленный символ Сделать присвоение должности определенной категории, эквивалентной присвоению ее всем категориям

Как сохранить классы JS, применяемые к панели управления WP через пользовательский плагин?

В настоящее время я работаю над плагином, который добавляет метабокс в область редактирования сообщений на панели управления. У метабокса есть «условные» поля, поэтому я хочу показывать / скрывать поля на основе других, в основном для пользователя.

Я добавил JS-файл, который работает, для добавления / удаления классов для этого эффекта. JS работает отлично, и мой CSS тоже.

Однако любые добавленные или удаленные классы не сохраняются, как только я нажимаю кнопку «Обновить / опубликовать». Какой шаг я пропущу, чтобы убедиться, что при сохранении сообщения состояние моего JS также сохраняется? Должен ли я использовать что-то вроде wp_localize_script, чтобы передать что-то между моим JS / PHP?

Я использую jQuery, так как мне нужно только JS для добавления / удаления классов. Я думал, что Ajax в этом случае будет излишним, но я новичок в написании JS для плагина, так что открываем возможность услышать предложения о лучших практиках. Заранее спасибо! 🙂

PS: Я открыт для привязки к конкретным ресурсам, если объяснение слишком велико, чтобы писать здесь.


Не уверен, что это поможет, но я все равно отброшу код. Вот моя очередь для моих файлов:

function admin_scripts_styles( $hook ) { if ( $hook !== 'post.php' ) { return; } //Yes, unfortunately, this is being done in a custom theme, not a plugin, hence get_template_directory_uri wp_enqueue_script( 'admin-featured-posts-scripts', get_template_directory_uri() . 'inc/admin-js/admin-featured-posts.js', [ 'jquery' ] ); wp_enqueue_style( 'admin-featured-posts-scripts', get_template_directory_uri() . 'inc/admin-css/admin-featured-posts.css' ); } //this gets called in an init() function but adding here for context add_action( 'admin_enqueue_scripts', [ $this, 'admin_scripts_styles' ] ); 

И вот моя функция, которая добавляет / удаляет классы. Это не весь мой JS-файл, а только функция для этого вопроса. Да, файл находится в очереди и да, это срабатывает правильно. Он также работает без проблем, но просто не «сохраняет», как только я обновляю / публикую сообщение. Он запускается с обработчиком события изменения.

 function enableOptions() { var enableVal = $(this).attr('value'), fieldOptions = $('#fieldWrapper'); if (enableVal === 'yes') { fieldOptions.removeClass('disabled'); } else { fieldOptions.addClass('disabled'); } } 

Вот как выглядит функция сохранения с помощью nonce. Сохраняемая часть работает с сохранением значений полей, когда публикация или обновление публикуется.

 public function save_featured_metabox( $post_id ) { $nonce_action = 'featured_metabox_nonce_action'; $nonce_name = 'featured_metabox_nonce'; $featured_fields = [ 0 => 'featured_field_one', 1 => 'featured_field_two', 2 => 'featured_field_three', 3 => 'featured_field_four', ]; if ( ! isset( $_POST[ $nonce_name ] ) || ! wp_verify_nonce( $_POST[ $nonce_name ], $nonce_action ) ) { return $post_id; } if ( ! current_user_can( 'edit_post', $post_id ) ) { return $post_id; } foreach ( $featured_fields as $featured_field ) { update_post_meta( $post_id, '_' . $featured_field, $this->sanitize_featured_fields( $featured_field ) ); } } 

Я намеренно упростил имена файлов и классов для публикации здесь в качестве примера.

Solutions Collecting From Web of "Как сохранить классы JS, применяемые к панели управления WP через пользовательский плагин?"

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

Я хотел был бы применить классы к метаболизму, которые показывают / скрывают область, основанную на значении окна выбора в пределах этого метаболизма. В области были радиокнопки, но они не были важны для общего вопроса, который я задал, – извините за путаницу! Я понял, что мне вообще не нужно общаться с PHP. Файл JS, который я сделал, будет загружаться каждый раз, когда публикация / обновление публикуется.

В дополнение к функции JS, которую я показал в моем вопросе в качестве примера, который срабатывает при «изменении» для #enable-field-here выбора #enable-field-here , теперь у меня есть функция, которая срабатывает при загрузке. Если выпадающее меню установлено в yes, то классы обрабатываются, поэтому «сохраняют» состояние метабокса даже после публикации / обновления публикации. Теперь это выглядит в jQuery. Я продолжил этот путь с любыми другими областями, затронутыми классами через JS, с тем же подходом. Надеюсь, что это поможет кому-то в будущем. 🙂

 var enableField = $( '#enable-field-here' ); setEnableDefault( enableField ); enableField.change( enableOptions ); function setEnableDefault( enableVal ) { var fieldOptions = $( '#fieldWrapper' ); if ( enableVal === 'yes' ) { fieldOptions.removeClass( 'disabled' ); } else { fieldOptions.addClass( 'disabled' ); } } function enableOptions() { var enableVal = $( this ).attr( 'value' ), fieldOptions = $( '#fieldWrapper' ); if ( enableVal === 'yes' ) { fieldOptions.removeClass( 'disabled' ); } else { fieldOptions.addClass( 'disabled' ); } }