Intereting Posts
Отображение страниц на странице категории приводит к страницам примеров Можно ли добавить дополнительный уровень управления версиями в номера версий версий wordpress для детей? Как извлечь текст: Нет фильма этим актером Как добавить div в меню? Отображение сообщения WP_Error с помощью action_notice action hook Как добавить подменю в существующее меню навигации в WordPress? Как упорядочить результаты WP_User_Query в соответствии с порядком массива идентификаторов пользователей? Лучшая практика для создания пользовательского шаблона архива для пользовательской таксономии, которая работает по всем темам? передавая аргумент get_template_part () или лучший способ кодирования Получить все сообщения WHERE custom_field – это значение LIKE Пользовательский wp_welcome_panel для каждой роли или пользовательской панели инструментов. Как плагины WordPress работают с API-интерфейсами oAuth2? Есть ли встроенная поддержка WordPress для ACL? Опция WP Plugin with Upgrade Как скрыть или переименовать ссылки «X» и «x-child» в источнике веб-сайта?

проблема приоритета add_filter

Я использую базовые пользовательские аватары для использования локального аватара в WordPress. И у меня есть простая функция в моих functions.php для получения прямой ссылки аватара. Моя проблема в том, что если я использую функцию get_avatar в своих функциях php, она возвращает gravatar img, но если я использую функцию get_avatar на своих внешних страницах, она возвращает локальные аватары. Вот код плагинов

public function __construct() { // Text domain $this->load_textdomain(); // Actions add_action( 'admin_init', array( $this, 'admin_init' ) ); add_action( 'show_user_profile', array( $this, 'edit_user_profile' ) ); add_action( 'edit_user_profile', array( $this, 'edit_user_profile' ) ); add_action( 'personal_options_update', array( $this, 'edit_user_profile_update' ) ); add_action( 'edit_user_profile_update', array( $this, 'edit_user_profile_update' ) ); add_action( 'bbp_user_edit_after_about', array( $this, 'bbpress_user_profile' ) ); // Shortcode add_shortcode( 'basic-user-avatars', array( $this, 'shortcode' ) ); // Filters add_filter( 'get_avatar', array( $this, 'get_avatar' ), 10, 5 ); add_filter( 'avatar_defaults', array( $this, 'avatar_defaults' ) ); } public function get_avatar( $avatar = '', $id_or_email, $size = 96, $default = '', $alt = false ) { // Determine if we recive an ID or string if ( is_numeric( $id_or_email ) ) $user_id = (int) $id_or_email; elseif ( is_string( $id_or_email ) && ( $user = get_user_by( 'email', $id_or_email ) ) ) $user_id = $user->ID; elseif ( is_object( $id_or_email ) && ! empty( $id_or_email->user_id ) ) $user_id = (int) $id_or_email->user_id; if ( empty( $user_id ) ) return $avatar; $local_avatars = get_user_meta( $user_id, 'basic_user_avatar', true ); if ( empty( $local_avatars ) || empty( $local_avatars['full'] ) ) return $avatar; $size = (int) $size; if ( empty( $alt ) ) $alt = get_the_author_meta( 'display_name', $user_id ); $author_class = is_author( $user_id ) ? ' current-author' : '' ; $avatar = "<img alt='" . esc_attr( $alt ) . "' src='" . $local_avatars['full'] . "' class='avatar avatar-{$size}{$author_class} photo' height='{$size}' width='{$size}' />"; return apply_filters( 'basic_user_avatar', $avatar ); } 

Я попытался использовать более низкий приоритет в add_filter ('get_avatar'), но если я использую плагины с более низким приоритетом, они не работают. Вероятно, потому что apply_filters в операторе return. Но я не знаю, в чем проблема. Как я могу исправить эту проблему? благодаря

Solutions Collecting From Web of "проблема приоритета add_filter"

  1. Фильтр get_avatar принимает 6 параметров, а не 5.

  2. $ Id_or_email также может быть экземпляром WP_Post , WP_User или хэш-строки md5. Так что лучше извлечь $user_id следующим образом:

  if ( is_numeric( $id_or_email ) ) { $user_id = $id_or_email; } elseif ( is_string($id_or_email) ) { if ( is_email($id_or_email) ) { $user = get_user_by('email', $id_or_email); $user_id = $user->ID; } else { // md5 hash string // Do something. } } elseif ( is_object($id_or_email) ) { if ($id_or_email instanceof \WP_User) { $user_id = $id_or_email->ID; } elseif ($id_or_email instanceof \WP_Post) { $user_id = $id_or_email->post_author; } else { $user_id = $id_or_email->user_id; } } else { return $avatar; } 
  1. Убедитесь, что get_user_meta( $user_id, 'basic_user_avatar', true ) возвращает что-то. Если ничего не будет возвращено, будет использован параметр $avatar .