Как получить данные из пользовательских метаполей, созданных с помощью плагина ACF Pro?

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

Мне нужно получить метаданные пользователя из базы данных, и у WordPress есть отличная функция get_user_meta() для этой цели, но проблема в том, что мне нужны не стандартные метаполя. Мне нужно получить данные из пользовательского поля, созданного с помощью ACF-pro. Я действительно запутался, как это сделать. Я попробовал:

$user_data = get_user_meta('19') 
print_r($user_data)

И среди множества различных данных я вижу то, что мне нужно:

[user-sector] => Array ( [0] => a:3:{i:0;s:3:"602";i:1;s:3:"601";i:2;s:3:"584";} ) [_user-sector] => Array ( [0] => field_611d13578192e ) [user-country] => Array ( [0] => a:1:{i:0;s:2:"17";} ) [_user-country] => Array ( [0] => field_611d138e8192f ) )

Конечно, я пробовал использовать: get_user_meta(’19’, ‘user-country’) и также пробовал использовать: get_user_meta(’19’, ‘_user-country’), и, конечно, ничего не получилось. Результат — просто пустой массив. Так есть ли на самом деле способ получить данные из метаполей, созданных с помощью ACF?

Вот что я использую:

<?php global $current_user; wp_get_current_user(); ?>
<?php if ( is_user_logged_in() ) { 
echo 'ID пользователя: ' . $current_user->ID . "<br>"; 
?>
<a href="<?php echo $current_user->favorite_url;?>">Просмотреть</a> <?php
 } 
else { wp_loginout(); } ?>

Вы можете просто использовать имеющийся у вас ID и заменить $current_user->ID на $current_user->user-country

Ответ или решение

Чтобы получить данные из пользовательских полей мета, созданных с помощью плагина ACF Pro (Advanced Custom Fields Pro), вы можете использовать функцию get_user_meta(), но нужно учитывать специфику хранения данных ACF.

1. Получение пользовательских мета-полей ACF:

Поля, созданные через ACF, обычно хранятся с префиксом _ и дополнительно имеют уникальные идентификаторы (например, field_611d13578192f). При использовании функции get_user_meta() необходимо передать правильное имя поля.

Например, чтобы получить данные для поля user-country, сначала убедитесь, что у вас есть имя поля. При использовании ACF имена полей могут содержать префикс, например:

$user_country = get_user_meta(19, 'user-country', true);

Обратите внимание, что третий параметр true указывает на то, что нужно получить одно значение, а не массив.

2. Декодирование сериализованных данных:

Из результата, который вы привели, видно, что данные сериализуются. Например, если ваше поле хранит данные в виде массива, как вы описали:

[user-country] => Array ( [0] => a:1:{i:0;s:2:"17";} )

Это означает, что вам нужно будет декодировать сериализованные данные. Используйте функцию unserialize() для этого:

$raw_country_data = get_user_meta(19, 'user-country', true);
$country_data = unserialize($raw_country_data);

print_r($country_data); // Теперь вы можете увидеть разобранные данные

3. Пример полного кода:

Вот пример полного кода, который может помочь вам получить значения пользовательских метаполей, созданных с помощью ACF:

<?php
// Получение пользовательского объекта
$user_id = 19; // замените на нужный вам ID пользователя
$user_country_raw = get_user_meta($user_id, 'user-country', true);

// Декодировка сериализованных данных
$country_data = unserialize($user_country_raw);

// Если хотите вывести на экран
if (!empty($country_data)) {
    echo 'User Country: ' . implode(', ', $country_data);
} else {
    echo 'Нет данных о стране пользователя.';
}
?>

4. Вывод данных для текущего пользователя:

Если вы хотите вывести данные для текущего вошедшего пользователя, можно использовать следующий код:

<?php
if (is_user_logged_in()) {
    // Получаем текущего пользователя
    global $current_user;
    wp_get_current_user();

    // Получаем пользовательский ID 
    $user_id = $current_user->ID;
    $user_country_raw = get_user_meta($user_id, 'user-country', true);
    $country_data = unserialize($user_country_raw);

    // Вывод данных
    if (!empty($country_data)) {
        echo 'User ID: ' . $user_id . '<br>';
        echo 'User Country: ' . implode(', ', $country_data);
    } else {
        echo 'Нет данных о стране пользователя.';
    }
} else {
    wp_loginout();
}
?>

Этот код проверяет, вошел ли пользователь, получает его мета-данные, декодирует их и выводит на экран. Надеюсь, это поможет вам с получением данных из пользовательских метаполей, созданных с помощью ACF Pro!

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

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