Intereting Posts
Каков правильный способ реализации функций в footer.php как показывать сообщения, в которых отсутствует meta_value Выделение wp_nav_menu () Класс предков без детей в структуре Nav? Действительно ли нужна страница «Сообщений»? Могут ли проблемы возникнуть, если оставить их пустыми? Изменить По умолчанию wp_mail From, без влияния на формы тяжести Таблица не обновляет данные таблицы WordPress переопределяет пользовательскую страницу 404 с ее собственным Thumbnail Посмотрите на WP Таксономия / пользовательское предложение типа типа публикации на сайте фильма Лучший способ объединить Dev и Live Site, чтобы стать промежуточным сайтом? Почему я получаю предупреждение о тайм-ауте? Несколько имен поддоменов – одна установка WP (не Multisite) – указывает на страницы КАТЕГОРИИ «Неопределенный» добавлен в содержимое страницы после того, как Google Adwords нажимает Заказывать сообщения по ID в указанном порядке Содержимое субменю дублируется

Как получить URL-адрес аватара вместо HTML-тега IMG при использовании get_avatar?

Я использую плагин под названием Simple Local Avatars, который позволяет загружать изображения автора, которые хранятся на моем сервере локально (без Gravatar). Плагин отлично работает, и get_avatar возвращает локальный аватар.

Однако мне нужно использовать этот аватар по-разному и в разных местах, и для этого мне нужен URL-адрес изображения локального аватара, а не весь HTML-тег. Я мог бы написать функцию-обертку для get_avatar которая использует RegEx или SimpleXML, чтобы выбрать и вернуть только URL-адрес, но мне было интересно, существует ли какой-либо существующий способ сделать это.

Хорошие новости для версий WordPress 4.2+

Начиная с версии 4.2 удобная get_avatar_url() , введенная как запрос функции в билете № 21195 несколько лет назад, теперь поставляется с ядром :

 /** * Retrieve the avatar URL. * * @since 4.2.0 * * @param mixed $id_or_email The Gravatar to retrieve a URL for. Accepts a user_id, gravatar md5 hash, * user email, WP_User object, WP_Post object, or comment object. * @param array $args { * Optional. Arguments to return instead of the default arguments. * * @type int $size Height and width of the avatar in pixels. Default 96. * @type string $default URL for the default image or a default type. Accepts '404' (return * a 404 instead of a default image), 'retro' (8bit), 'monsterid' (monster), * 'wavatar' (cartoon face), 'indenticon' (the "quilt"), 'mystery', 'mm', * or 'mysterman' (The Oyster Man), 'blank' (transparent GIF), or * 'gravatar_default' (the Gravatar logo). Default is the value of the * 'avatar_default' option, with a fallback of 'mystery'. * @type bool $force_default Whether to always show the default image, never the Gravatar. Default false. * @type string $rating What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are * judged in that order. Default is the value of the 'avatar_rating' option. * @type string $scheme URL scheme to use. See set_url_scheme() for accepted values. * Default null. * @type array $processed_args When the function returns, the value will be the processed/sanitized $args * plus a "found_avatar" guess. Pass as a reference. Default null. * } * @return false|string The URL of the avatar we found, or false if we couldn't find an avatar. */ function get_avatar_url( $id_or_email, $args = null ) { $args = get_avatar_data( $id_or_email, $args ); return $args['url']; } 

где get_avatar_data() также является новой вспомогательной функцией.

Он содержит эту часть кода:

 ... CUT ... /** * Filter whether to retrieve the avatar URL early. * * Passing a non-null value in the 'url' member of the return array will * effectively short circuit get_avatar_data(), passing the value through * the {@see 'get_avatar_data'} filter and returning early. * * @since 4.2.0 * * @param array $args Arguments passed to get_avatar_data(), after processing. * @param int|object|string $id_or_email A user ID, email address, or comment object. */ $args = apply_filters( 'pre_get_avatar_data', $args, $id_or_email ); if ( isset( $args['url'] ) && ! is_null( $args['url'] ) ) { /** This filter is documented in wp-includes/link-template.php */ return apply_filters( 'get_avatar_data', $args, $id_or_email ); } ... CUT ... 

где мы видим, что когда параметр url установлен, доступными фильтрами являются pre_get_avatar_data и get_avatar_data .

После обновления до 4.2 в последнее время у меня возникла проблема с темой, которая определила его собственную версию get_avatar_url() , без префикса имени функции или проверки get_avatar_url() . Итак, это пример того, почему это важно 😉

Ответ выше кажется всеобъемлющим, но я просто написал функцию обертки и перешел. Вот он, если вам это нужно (поместите это в functions.php ):

 function get_avatar_url($get_avatar){ preg_match("/src='(.*?)'/i", $get_avatar, $matches); return $matches[1]; } 

и затем используйте его, если вам это нужно в файлах шаблонов, например:

 <img src="<? echo get_avatar_url(get_avatar( $curauth->ID, 150 )); ?>" align="left" class="authorimage" /> 

Это просто проще.

Использование RegEx для синтаксического анализа HTML в этом случае в порядке, потому что это будет только анализ одного тега img , поэтому он не будет слишком дорогостоящим.

Вы можете использовать фильтр get_avatar для получения всех данных к аватару, а также URL- get_avatar внутри разметки. Я думаю, что WP не имеет функции для возврата только URL-адреса, если изображение аватара.

 $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />"; apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt); 

Также вы можете переписать эту функцию внутри плагина или темы, функция активна onyl, если это имя функции не указано в другом месте.

 if ( ! function_exists( 'get_avatar' ) ) : 

Таким образом, можно добавить параметр для возврата только URL-адреса изображения, например, использовать param $url с TRUE и вы получите только URL-адрес.

 /** * Retrieve the avatar for a user who provided a user ID or email address. * * @since 2.5 * @param int|string|object $id_or_email A user ID, email address, or comment object * @param int $size Size of the avatar image * @param string $default URL to a default image to use if no avatar is available * @param string $alt Alternate text to use in image tag. Defaults to blank * @param boolean $url, true for get only the url of the image, no markup * @return string <img> tag for the user's avatar */ function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false, $url = FALSE ) { if ( ! get_option('show_avatars') ) return false; if ( false === $alt) $safe_alt = ''; else $safe_alt = esc_attr( $alt ); if ( !is_numeric($size) ) $size = '96'; $email = ''; if ( is_numeric($id_or_email) ) { $id = (int) $id_or_email; $user = get_userdata($id); if ( $user ) $email = $user->user_email; } elseif ( is_object($id_or_email) ) { // No avatar for pingbacks or trackbacks $allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) ); if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) ) return false; if ( !empty($id_or_email->user_id) ) { $id = (int) $id_or_email->user_id; $user = get_userdata($id); if ( $user) $email = $user->user_email; } elseif ( !empty($id_or_email->comment_author_email) ) { $email = $id_or_email->comment_author_email; } } else { $email = $id_or_email; } if ( empty($default) ) { $avatar_default = get_option('avatar_default'); if ( empty($avatar_default) ) $default = 'mystery'; else $default = $avatar_default; } if ( !empty($email) ) $email_hash = md5( strtolower( trim( $email ) ) ); if ( is_ssl() ) { $host = 'https://secure.gravatar.com'; } else { if ( !empty($email) ) $host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash[0] ) % 2 ) ); else $host = 'http://0.gravatar.com'; } if ( 'mystery' == $default ) $default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com') elseif ( 'blank' == $default ) $default = includes_url('images/blank.gif'); elseif ( !empty($email) && 'gravatar_default' == $default ) $default = ''; elseif ( 'gravatar_default' == $default ) $default = "$host/avatar/?s={$size}"; elseif ( empty($email) ) $default = "$host/avatar/?d=$default&amp;s={$size}"; elseif ( strpos($default, 'http://') === 0 ) $default = add_query_arg( 's', $size, $default ); if ( !empty($email) ) { $out = "$host/avatar/"; $out .= $email_hash; $out .= '?s='.$size; $out .= '&amp;d=' . urlencode( $default ); $rating = get_option('avatar_rating'); if ( !empty( $rating ) ) $out .= "&amp;r={$rating}"; if ( $url ) $avatar = $out; else $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"; } else { if ( $url ) $avatar = $out; else $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />"; } return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt); } 

Еще один маленький вариант: вы создаете URL-адрес с правилом Граватара.

 function get_gravatar_url( $email ) { $hash = md5( strtolower( trim ( $email ) ) ); return 'http://gravatar.com/avatar/' . $hash; } 

используйте это в своем источнике с электронными письмами авторов, и вы получите URL-адрес этого изображения.

Я думаю, что это лучшая версия ответа aalaap:

 // In your template ... $avatar_url = get_avatar_url ( get_the_author_meta('ID'), $size = '50' ); // Get src URL from avatar <img> tag (add to functions.php) function get_avatar_url($author_id, $size){ $get_avatar = get_avatar( $author_id, $size ); preg_match("/src='(.*?)'/i", $get_avatar, $matches); return ( $matches[1] ); } 
 get_user_meta($userId, 'simple_local_avatar'); 

Простые локальные аватары используют мета-поля для хранения аватара, поэтому вы можете просто получить значения (ы), вызвав get_user_meta и захватив поле «simple_local_avatar». Вы получите такой массив:

 array ( [full] => 'http://...', [96] => 'http://...', [32] => 'http://...' ) 

Метод alaap больше не работает в WordPress 4.2

Я придумал решение. Вот он, и он работает хорошо:

  function my_gravatar_url() { // Get user email $user_email = get_the_author_meta( 'user_email' ); // Convert email into md5 hash and set image size to 80 px $user_gravatar_url = 'http://www.gravatar.com/avatar/' . md5($user_email) . '?s=80'; echo $user_gravatar_url; } 

в Шаблоне просто используйте:

 <?php my_gravatar_url() ?> 

Обратите внимание: он должен использоваться внутри цикла.

Когда аватар был загружен локально, WP, возвращает тег img с атрибутом src в двойных кавычках, поэтому я нашел, что этот шаблон работал лучше:

 preg_match("/src=['\"](.*?)['\"]/i", $get_avatar, $matches); 

Несколько часов назад мне было интересно, как это сделать. Но вскоре я получил решение и сделал плагин, пожалуйста, проверьте, работает ли get_avatar_url ($ user_id, $ size) для вас или нет. Благодаря..

Код плагина:

 /* Plugin Name: Get Avatar URL Plugin URI: https://github.com/faizan1041/get-avatar-url Description: get_avatar returns image, get_avatar_url will give you the image src. Author: Faizan Ali Version: 1.0 Author URI: https://github.com/faizan1041/ License: GPL v2+ */ function get_avatar_url($user_id, $size) { $avatar_url = get_avatar($user_id, $size); $doc = new DOMDocument(); $doc->loadHTML($avatar_url); $xpath = new DOMXPath($doc); $src = $xpath->evaluate("string(//img/@src)"); return $src; } function sc_get_avatar_url( $atts ) { $atts = shortcode_atts( array( 'email' => '', 'size' => 150 ), $atts, 'avatar_url' ); return get_avatar_url($atts['email'],$atts['size']); } add_shortcode( 'avatar_url', 'sc_get_avatar_url' ); 

Применение:

Вызов функции:

 get_avatar_url( get_the_author_meta( 'user_email'), 150); 

Использование короткого кода:

 do_shortcode('[avatar_url email="' . get_the_author_meta( 'user_email') .'" size=150 ]' );