Обновление пользовательских метаданных

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

Я создал новый пользовательский мета для моих пользователей 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.

  1. Создайте 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');
  1. В вашем 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-запроса. Этот метод позволяет с минимальными усилиями управлять пользовательскими метаданными, что может значительно улучшить взаимодействие с вашими пользователями.

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

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