Вопрос или проблема
Мне нужно получить метаданные пользователя из базы данных, и у 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!