Пользовательский аватар – поля ACF

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

Я использую wp multisite и ACF custom field (редактирование пользователя) для моего локального аватара, в моем functions.php я добавил:

add_action('get_avatar', 'tsm_acf_profile_avatar', 10, 3);
function tsm_acf_profile_avatar( $avatar, $id_or_email, $size, $default, $alt ) {

$user="";

// Получить пользователя по id или email
if ( is_numeric( $id_or_email ) ) {

    $id   = (int) $id_or_email;
    $user = get_user_by( 'id' , $id );

} elseif ( is_object( $id_or_email ) ) {

    if ( ! empty( $id_or_email->user_id ) ) {
        $id   = (int) $id_or_email->user_id;
        $user = get_user_by( 'id' , $id );
    }

} else {
    $user = get_user_by( 'email', $id_or_email );
}

if ( ! $user ) {
    return $avatar;
}

// Получить id пользователя
$user_id = $user->ID;

// Получить id файла
$image_id = get_user_meta($user_id, 'avatar', true); // ИЗМЕНИТЬ НА ИМЯ ВАШЕГО ПОЛЯ

// Выход, если у нас нет локального аватара
if ( ! $image_id ) {
    return $avatar;
}

// Получить размер файла
$image_url  = wp_get_attachment_image_src( $image_id, 'thumbnail' ); // Установить размер изображения по имени
// Получить url файла
$avatar_url = $image_url[0];
// Получить разметку img
$avatar="<img alt="" . $alt . '" src="' . $avatar_url . '" class="avatar avatar-' . $size . '" height="' . $size . '" width="' . $size . '"/>';

// Вернуть наш новый аватар
return $avatar;
 }

Это отлично работает на основном блоге (блог 1), но проблема в том, что когда я добавляю этих пользователей на поддомене (блог 2), мое поле аватара пустое в блоге 2, также после этого, если я загружаю аватар в блоге 2, то тот же пользователь в блоге 1 получает случайное изображение случайного пользователя.

У меня нет идей, почему это происходит, любая помощь приветствуется.

Спасибо

Вы пробовали что-то вроде этого?

Переменные пользователя

<?php
// Определите ID пользователя
// Замените NULL на ID пользователя для запроса
$user_id = NULL;

// Пример: Получить ID текущего пользователя
// $user_id = get_current_user_id();

// Определить префиксированный ID пользователя
$user_acf_prefix = 'user_';
$user_id_prefixed = $user_acf_prefix . $user_id;
?>

Отобразить аватар

<?php $avatar = get_field( 'avatar', $user_id_prefixed ); ?>
<?php if ( $avatar ) { ?>
    <img src="https://wordpress.stackexchange.com/questions/304395/<?php echo $avatar["url']; ?>" alt="https://wordpress.stackexchange.com/questions/304395/<?php echo $avatar["alt']; ?>" />
<?php } ?>

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

Ваша проблема с пустыми аватарами на сабсайтах WordPress Multisite может быть связана с уникальностью метаданных пользователей в каждой из сетей сайтов, так как они не делят одни и те же метаданные кросс-сайт. Приведенный вами код для замены аватара через ACF (Advanced Custom Fields) работает на основе пользовательского мета-поля, что не всегда кросс-совместимо между разными сайтами одной мультисайтовой сети.

Проблема заключается в следующем:

  1. Отдельные метаданные: В мультисайтовой установке WordPress каждая подсеть может иметь свои уникальные метаданные пользователей. Когда вы добавляете пользователя на новый сайт, их метаданные (например, аватар) не переносятся автоматом с другого сайта. Таким образом, аватар, который вы загружаете на один сайт, не будет виден на другом.

  2. Коллизия данных: Если вы вручную загружаете аватар для одного и того же пользователя на другом сайте, это может случайно заменить или создать конфликт с существующими данными. Это может объяснить случайное отображение "рандомного" изображения другого пользователя.

Для решения этой проблемы, рассмотрим несколько возможных вариантов:

Решение:

  1. Унификация идентификаторов пользователей: Используйте уникальные ключи для хранения метаданных. Например, вместо использования просто 'avatar', вы можете сохранять поле как 'avatar_siteID', где siteID — это идентификатор текущего сайта. Таким образом, аватар будет уникальным для каждого сайта.

  2. Глобальные пользовательские метаданные: Используйте глобальные пользовательские метаданные или храните данные в центральной базе, доступной для всех сайтов. Это можно реализовать через плагин для обмена данными между сайтами WP Multisite или через API вызовы к единому серверу данных.

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

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

Код для реализации первого способа мог бы выглядеть так:

$image_id = get_user_meta($user_id, 'avatar_' . get_current_blog_id(), true);

SEO-оптимизация:

Для SEO важно, чтобы ваш контент был оптимизирован под ключевые слова, такие как "WordPress Multisite", "ACF поля", "Пользовательский аватар". Учтите, что использование четкой структуры статьи и ключевых слов улучшает видимость в поисковых системах. Не забудьте использовать понятные заголовки и подзаголовки, что также улучшает читаемость контента как для пользователей, так и для поисковых роботов.

Надеюсь, приведенные выше точки и рекомендации помогут вам решить вопрос с отображением аватаров пользователей в сети WordPress Multisite.

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

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