Вопрос или проблема
Я создал новый пользовательский мета для моих пользователей WordPress. Это всего лишь две радиокнопки (либо ‘Да’, либо ‘Нет’).
Я создал кнопку на фронтенде и хочу, чтобы при нажатии на кнопку значение изменялось на ‘Истина’. По умолчанию оно будет установлено на значение ‘Нет’, и мне не придется беспокоиться о том, что кнопку снова нажмут, так как я скрываю кнопку, как только значение устанавливается на ‘Истина’.
Я нашел несколько способов, как можно отобразить форму с кнопкой отправки, но возможно ли это сделать всего лишь с одной кнопкой, как ниже:
<button id="updateMyUserMeta" name="updateMyUserMeta">Обновить</button>
Вы можете создать аналогичное решение, как в случае с формой и кнопкой отправки, добавив событие onclick
к вашей кнопке:
<button id="updateMyUserMeta" name="updateMyUserMeta" onclick="window.location.href('http://example.com?my_custom_user_meta=true');">Обновить</button>
Затем добавьте это в functions.php
вашей темы.
/**
* Обновляет поле 'my_custom_user_meta', если
* пользователь нажимает кнопку 'Обновить'.
*/
function update_my_custom_user_meta() {
if (empty($_GET['my_custom_user_meta'])) {
return;
}
$user_id = current_user_id();
if (empty($user_id)) {
return false;
}
update_user_meta( $user_id, 'my_custom_user_meta', true);
}
add_filter('init', 'update_my_custom_user_meta');
Замените http://example.com
на URL вашего сайта и замените my_custom_user_meta
на название вашего пользовательского мета поля.
Чтобы сделать это безопасно, вам также следует ознакомиться с добавлением проверок nonce.
Ответ или решение
Обновление пользовательских метаданных в WordPress: Как изменить значение с помощью одной кнопки
В данном руководстве мы рассмотрим, как обновить пользовательскую метадату в WordPress, используя одну кнопку. В вашем случае необходимо реализовать функциональность, при которой при нажатии кнопки значение метаданных изменяется с "Нет" на "Да". Мы будем рассматривать, как это сделать безопасно и эффективно.
Этап 1: Создание кнопки
Для начала вам нужно создать кнопку на фронтенде вашего сайта. Это можно сделать с помощью столбца HTML:
<button id="updateMyUserMeta" name="updateMyUserMeta" onclick="updateUserMeta()">Обновить</button>
Этап 2: Написание функции обновления метаданных
Теперь нужно написать JavaScript-функцию, которая будет выполняться при нажатии на кнопку. Эта функция отправит запрос на сервер для обновления метаданных.
function updateUserMeta() {
const xhr = new XMLHttpRequest();
xhr.open("POST", "/wp-admin/admin-ajax.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onload = function() {
if(xhr.status === 200) {
// Скрыть кнопку после успешного обновления
document.getElementById('updateMyUserMeta').style.display = 'none';
alert('Метаданные пользователя обновлены успешно!');
} else {
alert('Произошла ошибка при обновлении.');
}
};
xhr.send("action=update_user_meta");
}
Этап 3: Создание AJAX-запроса на сервере
Теперь нам нужно обработать AJAX-запрос во внутреннем коде WordPress. Для этого откройте файл functions.php
вашей темы и добавьте следующий код:
add_action('wp_ajax_update_user_meta', 'update_my_custom_user_meta');
function update_my_custom_user_meta() {
// Проверяем, авторизован ли пользователь
if (!is_user_logged_in()) {
wp_send_json_error('Пользователь не авторизован');
wp_die();
}
$user_id = get_current_user_id();
// Обновляем пользовательские метаданные
update_user_meta($user_id, 'my_custom_user_meta', true);
// Возвращаем успешный ответ
wp_send_json_success('Метаданные успешно обновлены');
wp_die();
}
Этап 4: Обеспечение безопасности с помощью nonce
Чтобы защитить ваш AJAX-запрос от CSRF-атак, мы рекомендуем добавить nonce. В вашем JavaScript коде и в PHP коде вам нужно создать и проверять nonce.
- Создайте nonce при загрузке страницы:
function enqueue_scripts() {
wp_enqueue_script('my-script', get_template_directory_uri() . '/js/my-script.js', array('jquery'), null, true);
wp_localize_script('my-script', 'my_ajax_object', array('nonce' => wp_create_nonce('my_nonce')));
}
add_action('wp_enqueue_scripts', 'enqueue_scripts');
- В вашем AJAX-запросе проверяйте nonce:
xhr.send("action=update_user_meta&nonce=" + my_ajax_object.nonce);
И модифицируйте вашу функцию update_my_custom_user_meta()
для проверки nonce:
function update_my_custom_user_meta() {
// Проверяем nonce
check_ajax_referer('my_nonce', 'nonce');
// Остальная часть кода остается такой же
}
Заключение
Теперь у вас есть функциональная кнопка, которая обновляет пользовательскую метадату в WordPress с помощью одного нажатия. Определенно стоит уделить внимание безопасности, используя nonce для защиты вашего AJAX-запроса. Этот метод позволяет с минимальными усилиями управлять пользовательскими метаданными, что может значительно улучшить взаимодействие с вашими пользователями.