Свои хуки или других плагинов не работают при ajax запросах. У меня стоит хук на свой аватар по умолчанию, (меняет человека-загадку на другую картинку), так же плагин wp social login подменяет стандартные аватары на свои, но когда вызывается get_avatar через какой-либо ajax-request.php (в моем случае в message), то выводится аватар "человек-загадка", даже если у пользователя есть свой. Например, если в профиле пользователя просматривать переписки, то изначально аватар того с кем была переписка имеется (рис. 1), но стоит отсортировать по "месяц"/"все время", то через ajax возвращается "человек-загадка" (рис. 2). Или в непосредственно в переписке, когда ее открываешь в профиле, то все аватары прогружаются (рис. 3), но если загрузить старые сообщения, то они по ajax уже придут дефолтные (рис. 4).
Как я понимаю, дело в подключении функционала wp в ajax-request.php, но пока не понял как исправить.
рис. 1 -
рис. 2 -
рис. 3 -
рис. 4 -
Эта проблема известна.
Дело в том, что в связи с необходимостью снижения нагрузки при ajax-запросах, ядро ВП отключается и стандартная функция get_avatar не работает. Подключается ее не совсем полноценная замена в файле replacement.php. Работа этой функции-замены и является причиной, можете ее поковырять.
Переделал.
Добавил пару функций:
function get_user_sl_avatar( $user_id ) {
$user_avatar = get_usermeta( $user_id, 'wsl_current_user_image');
if( ! $user_avatar )
{
$user_avatar = get_usermeta( $user_id, 'wsl_user_image');
}
return $user_avatar;
}
function get_id_by_email($email) {
global $wpdb;
$user = $wpdb->get_var("SELECT ID FROM ".$wpdb->prefix."users WHERE user_email = '$email'");
return $user;
}
В get_avatar перед return apply_filters(...) добавил:
if(isset($id))
{
$aurl = get_user_sl_avatar($id);
}
elseif(!empty($email))
{
$id = get_id_by_email(trim($email));
$aurl = get_user_sl_avatar($id);
}
if(isset($aurl))
{
$avatar = "<img alt="{$safe_alt}" src="{$aurl}" class="avatar avatar-{$size} photo" height="{$size}" width="{$size}" />";
}
Не за что, вам спасибо.
Обнаружил неприятный момент - очень не удобно кастомизировать под себя кабинет, т.е. менять расположение блоков, структуру. Большая фрагментация кода. Нет в планах полноценных шаблонов (не только css), чтоб можно было сверстать самому кабинет и обновляться потом без проблем?
А почему именно сейчас неудобно заниматься кастомизацией? Ведь почти каждый элемент ЛК выводится через свой хук, можно же их просто отключать со стороны любого другого дополнения или назначать для определенных функций другие хуки. Таким образом, можно менять порядок размещения различных блоков или вообще их убирать не меняя код плагина.
Пока хотя бы так, но заниматься кастомизацией можно.