Вопрос или проблема
Я использую плагин, который позволяет пользователям загружать графику профиля вместо аватаров. Плагин называется “User Avatar“.
Я отображаю графику профиля пользователя с помощью этого кода:
echo get_avatar( get_the_author_meta('user_email'), $size="60")
Все работает отлично, только я хотел бы, чтобы в случае, если у пользователя нет графики профиля, ничего не отображалось. Если я использую настройки аватара “Обсуждения”, чтобы отображать “Пусто”, когда аватара нет, я все равно получаю текст, который обрамляет место, где могла бы быть графика, создавая пустой квадрат вместо профиля пользователя.
Есть ли у кого-нибудь предложения?
Заранее спасибо за внимание.
Несколько месяцев назад я написал обсуждение на этой теме в ветке WordPress.org. Посмотрите: http://wordpress.org/support/topic/custom-avatar-4?replies=5
Вот код, который вам понадобится в шаблоне, в котором вы хотите разместить свои аватары:
<?php
$uploads = wp_upload_dir(); //Путь загрузки WordPress
$uploads_url = ( $uploads['baseurl'] ); //полный url директории загрузок
$uploads_dir = ( $uploads['basedir'] ); //полный путь директории загрузок
$user_id = $post->post_author; //id автора (если используется в цикле)
$avatar_filename = user_avatar_avatar_exists($user_id ); //функция из плагина
if (file_exists($uploads_dir.'/avatars/'.$user_id ."https://wordpress.stackexchange.com/".$avatar_filename)) {
echo ('<img src="https://wordpress.stackexchange.com/questions/116001/.$uploads_dir."/avatars/'.$user_id ."https://wordpress.stackexchange.com/".$avatar_filename.' class="user-avatar"/>');
}
else {
echo get_avatar( get_the_author_meta('user_email'), $size="60");
} ?>
ИЗМЕНЕНИЕ: Чтобы ничего не показывать, когда gravar пустой, используйте это (источник вышеуказанной ветки):
<?php
$uploads = wp_upload_dir(); //Путь загрузки WordPress
$uploads_url = ( $uploads['baseurl'] ); //полный url директории загрузок
$uploads_dir = ( $uploads['basedir'] ); //полный путь директории загрузок
$user_id = $post->post_author; //id автора (если используется в цикле)
$avatar_filename = user_avatar_avatar_exists($user_id ); //функция из плагина
$hash = md5(strtolower(trim($user->user_email)));
$uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=404';
$headers = @get_headers($uri);
if (((preg_match("|200|", $headers[0])) || (file_exists($uploads_dir.'/avatars/'.$user_id ."https://wordpress.stackexchange.com/".$avatar_filename))) {
if (file_exists($uploads_dir.'/avatars/'.$user_id ."https://wordpress.stackexchange.com/".$avatar_filename)) {
echo ('<img src="https://wordpress.stackexchange.com/questions/116001/.$uploads_dir."/avatars/'.$user_id ."https://wordpress.stackexchange.com/".$avatar_filename.' class="user-avatar"/>');
}
else {
echo get_avatar( get_the_author_meta('user_email'), $size="60");
}
} ?>
Вот фильтр, который сделает свое дело:
function ns_filter_avatar($avatar, $id_or_email, $size, $default, $alt, $args)
{
$headers = @get_headers( $args['url'] );
if( ! preg_match("|200|", $headers[0] ) ) {
return;
}
return $avatar;
}
add_filter('get_avatar','ns_filter_avatar', 10, 6);
Чтобы это работало, вы должны добавить значение 404
как третий аргумент $default
в get_avatar()
. Пример:
get_avatar( $user_email, 45, '404' )
Ответ или решение
Условный аватар в WordPress с плагином "User Avatar"
Чтобы настроить отображение аватаров пользователей в WordPress с использованием плагина "User Avatar", мы можем модифицировать код таким образом, чтобы при отсутствии пользовательского аватара ничего не отображалось. Таким образом, при отсутствии загруженного аватара мы устраним пустое место, которое обычно занимает изображение.
Шаг 1. Проверка наличия аватара
Мы будем использовать встроенные функции WordPress и некоторые методы работы с файлами для проверки, существует ли аватар для пользователя.
<?php
$uploads = wp_upload_dir(); // Получаем путь к директории загрузок
$uploads_url = $uploads['baseurl']; // URL загрузок
$uploads_dir = $uploads['basedir']; // Полный путь к директории
$user_id = get_the_author_meta('ID'); // Получаем ID автора
$avatar_filename = user_avatar_avatar_exists($user_id); // Проверяем, существует ли аватар
// Проверяем наличие файла аватара
if (file_exists($uploads_dir . '/avatars/' . $user_id . '/' . $avatar_filename)) {
echo '<img src="' . $uploads_url . '/avatars/' . $user_id . '/' . $avatar_filename . '" class="user-avatar" />';
} else {
// Граватар: если у пользователя нет загруженного аватара
$hash = md5(strtolower(trim(get_the_author_meta('user_email'))));
$uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=404'; // URL для проверки наличия аватара
$headers = @get_headers($uri);
// Если ответ не 200 (т.е. аватара нет), ничего не выводим
if (strpos($headers[0], '200') !== false) {
echo get_avatar(get_the_author_meta('user_email'), 60, '404');
}
}
?>
Шаг 2. Фильтрация по умолчанию
Чтобы настроить возврат пустого значения в случае отсутствия аватара, вы можете использовать следующий фильтр.
function ns_filter_avatar($avatar, $id_or_email, $size, $default, $alt, $args) {
// Проверяем, доступен ли аватар по URL
$headers = @get_headers($args['url']);
if (!preg_match("|200|", $headers[0])) {
return ''; // Возвращаем пустоту, если аватара нет
}
return $avatar;
}
add_filter('get_avatar', 'ns_filter_avatar', 10, 6);
Шаг 3. Применение фильтра
Теперь вы можете воспользоваться модифицированным кодом get_avatar()
следующим образом:
echo get_avatar(get_the_author_meta('user_email'), 60, '404');
Здесь '404'
указывает, что если аватар не существует, функция вернет пустое значение, что полностью соответствует вашим требованиям.
Заключение
С помощью вышеописанных шагов, вы сможете настроить условное отображение аватаров в WordPress с использованием плагина "User Avatar". Если ни собственный пользовательский аватар, ни Граватар отсутствуют, вы можете не отображать ничего, избегая тем самым появления пустых мест на странице. Описанный подход повышает визуальную чистоту вашего сайта и улучшает пользовательский опыт.
Если у вас будет возникнуть дополнительные вопросы или вам потребуется помощь в реализации, не стесняйтесь обращаться!