Двухэтапная регистрация или проблемы с аватаром!

Возникла еще одна проблема которая мне не по плечу, так скажем финальная:
Одной из важных функций моего сайта была авторизация через WeChat это некий китайский мессенджер который у нас в Китае просто безумно популярен и написать авторизацию через его API  было для меня героическим поступком. Но все равно проблемы с WordPress остались и одна из них Gravatar + Avatar

При авторизации через сайт я получаю данные с мессенджера
Имя => Логин => Страну => Картинку  и пользователь регистрируется все хорошо и все отлично работает. Но потом я заметил в некоторых местах сайта где видно списки пользователя http://onwp.ru/question/podpiska-na-post  как например тут (спасибо админу огромное), не отображается их Аватар , а только граватар. В личном кабинете я смог добиться отображение через Get_avatar();
Но в других местах это ни в какую не работает что бы я не делал. Вопрос решается если пользователь загрузит аватар.  Аватар попадает в виде ссылки в базу данных: open_img и оттуда ее можно получить в странице профиля, но нигде в списках они не отображаются.

Работает если я например возьму напрямую ID пользователя. Но больше никак. Я уже отключал граватар не помогало и ничего поделать не могу. Поэтому решил сделать что-то типо двухэтапной авторизации, ты зашел на сайт нажал авторизоваться через WeChat и после тебе предлагают заполнить поля и аватарку загрузить. Если вы знаете такой плагин подскажите. Или решение которая будет обязательно просить заполнить эти поля. Это очень важно.

Или если вы знаете как можно вывести такого рода аватары то подскажите пожалуйста.


class WECHAT_CLASS { function open_login() { $params=array( 'appid'=>osop('WECHAT_AKEY'), 'redirect_uri'=>home_url('/').'?connect=wechat&action=callback', 'response_type'=>'code', 'scope'=>'snsapi_login', 'state'=>md5(uniqid(rand(), true)) ); header('Location:https://open.weixin.qq.com/connect/qrconnect?'.http_build_query($params).'#wechat_redirect'); exit(); } function open_callback($code) { $params=array( 'appid'=>osop('WECHAT_AKEY'), 'secret'=>osop('WECHAT_SKEY'), 'code'=>$code, 'grant_type'=>'authorization_code' ); $str = open_connect_http('https://api.weixin.qq.com/sns/oauth2/access_token', http_build_query($params), 'POST'); $_SESSION["access_token"] = $str["access_token"]; $_SESSION['open_id'] = $str["openid"]; } function open_new_user(){ $user = open_connect_http("https://api.weixin.qq.com/sns/userinfo?access_token=".$_SESSION["access_token"]."&openid=".$_SESSION['open_id']."&lang=zh_CN"); $_SESSION['open_img'] = $user['headimgurl']; return array( 'user_login' => $user['nickname'], 'first_name' => $user['nickname'], 'nickname' => $user['nickname'], 'display_name' => $user['nickname'], 'user_email' => $user['nickname'] .'@hannation.com' ); } }

Добавить Комментарий

Посмотрите вот тут:

http://www.billerickson.net/wordpress-custom-avatar/

Там создается произвольное поле в профиле под ссылку на картинку. Затем при выводе аватара мы подменяем ссылку на картинку.

Будут вопросы задавайте.

Так  я прочитал:

Это получается мы создаем плагин я правильно понял?
Или же этот код мы встраиваем в WP-admin/user-edit.php
А вторую часть в Function.php

 

в 27.07.2016.

Затупил извиняюсь! Поле появилось тут в функции я добавил чтобы ссылка загружалась в данное поле. Теперь как его подменить?

function open_new_user(){

$user = open_connect_http("https://api.weixin.qq.com/sns/userinfo?access_token=".$_SESSION["access_token"]."&openid=".$_SESSION['open_id']."&lang=zh_CN");
$_SESSION['be_custom_avatar'] = $user['headimgurl'];

return array(

'user_login' => $user['nickname'],

'first_name' => $user['nickname'],

'nickname' => $user['nickname'],

'display_name' => $user['nickname'],

'user_email' => $user['nickname'] .'@hannation.com'

);

}

}

в 27.07.2016.

Все добавлять в функтионс.php

Если ссылка сохраняется в поле, то на той же странице есть код, который заменяет аватар при выводе.

add_filter(get_avatar, be_gravatar_filter, 10, 5);

и функция function be_gravatar_filter($avatar, $id_or_email, $size, $default, $alt)

в 27.07.2016.

не попадает ссылка( поле остается пустым

в 27.07.2016.

при регистрации, когда вы сохраняете адрес картинки, вы так ее сохраняете?

 update_user_meta( $user_id, 'be_custom_avatar', $be_custom_avatar );
 

где:

$user_id — id юзера

‘be_custom_avatar’ — название нового поля где храним адрес аватара

$be_custom_avatar — адрес аватара

 

в 27.07.2016.

Затем, при выводе подменяем ссылку на картинку если она есть(сохранена в поле be_custom_avatar )

 function be_gravatar_filter($avatar, $id_or_email, $size, $default, $alt) {
// If provided an email and it doesn't exist as WP user, return avatar since there can't be a custom avatar
 $email = is_object( $id_or_email ) ? $id_or_email->comment_author_email : $id_or_email;
 if( is_email( $email ) && ! email_exists( $email ) )
 return $avatar;
 // получим ссылку на наш произвольный аватар и если она есть вернем картинку с нашим аватаром
 $custom_avatar = get_the_author_meta('be_custom_avatar');
 if ($custom_avatar)
 $return = '<img src="'.$custom_avatar.'" width="'.$size.'" height="'.$size.'" alt="'.$alt.'" />';
 elseif ($avatar)
 $return = $avatar;
 else
 $return = '<img src="'.$default.'" width="'.$size.'" height="'.$size.'" alt="'.$alt.'" />';
 return $return;
 }
 add_filter('get_avatar', 'be_gravatar_filter', 10, 5);
 

 

Это все что вам нужно.

То есть записываем в поле.

Заменяем картинку с помощью фильтра «get_avatar»(аватарки должны выводиться и выводятся стандартно через эту функцию)

в 27.07.2016.

Не срабатывает поле остается пустым и ничего не загружается(

function open_new_user(){

$user = open_connect_http("https://api.weixin.qq.com/sns/userinfo?access_token=".$_SESSION["access_token"]."&openid=".$_SESSION['open_id']."&lang=zh_CN");

$_SESSION['open_img'] = $user['be_custom_avatar'];

return array(

'user_login' => $user['nickname'],

'first_name' => $user['nickname'],

'nickname' => $user['nickname'],

'display_name' => $user['nickname'],

'user_email' => $user['nickname'] .'@hannation.com'

);

}

}

 

Вот сюда не попадает! Может стоит указать не $user а $user_id в этой функции?

в 01.08.2016.

Рабаотает только если вместо этого

$_SESSION['open_img'] = $user['be_custom_avatar'];

поставить это. Я даже не знаю может это как-то зависит от WordPress?

$_SESSION['open_img'] = $user['headimgurl'];

Но это сюда не поставишь потому-что не в одном списке не отображается аватарка только на странице самого пользователя!

в 01.08.2016.

Я честно сказать не понимаю что эта за функция и зачем она, я про это:


function open_new_user(){
$user = open_connect_http("https://api.weixin.qq.com/sns/userinfo?access_token=".$_SESSION["access_token"]."&openid=".$_SESSION['open_id']."&lang=zh_CN");
$_SESSION['open_img'] = $user['be_custom_avatar'];
return array(
'user_login' => $user['nickname'],
'first_name' => $user['nickname'],
'nickname' => $user['nickname'],
'display_name' => $user['nickname'],
'user_email' => $user['nickname'] .'@hannation.com'
);
}
}

 

Вы сказали что можете получить адрес картинки, Вы сделали свою регистрацию.

Если вот это верно:

«Вы сказали что можете получить адрес картинки, Вы сделали свою регистрацию.»

В чем проблема тогда?

При регистрации пользователя берете картинку и сохраняете в произвольное поле адресс на нее:


// тут ваш код регистрации или добавьте на хук окончания регистрации
update_user_meta( $user_id, 'be_custom_avatar', $be_custom_avatar );

все, если так сделаете картинка у вас будет.

Далее используйте код замены(для стандартной функции вывода аватара) картинки если она есть(код выше был).

 


А вот что делает ваша функция open_new_user(), мне вообще не понятна логика ее работы и откуда она вызывается и для чего.

в 02.08.2016.

Эта функция срабатывает когда человек региструется через социальную сеть We Chat.  Она нужна что бы взять все данные пользователя из We Chat  и войти с помощью них на сайт. Но почему-то картинка профиля не хочет попадать в данное поле. Я вроде докапался вы очень помогли. Там видно из самого ресурса какие-то проблемы связи с WP перепишу регистрацию посмотрим что выйдет(

в 04.08.2016.

так вы в этой функции и не сохраняете картинку…

в 08.08.2016.

Нет я ее сохранял только в другом отрезке кода. Здесь я просто их получал. Я уже решил дело было в самой соц. сети, это все китайские проказни, нужно получать разрешение на запросы всех данных как оказалось. Теперь все работает спасибо большое!

в 19.08.2016.
Добавить Комментарий

Ваш ответ

Размещая свой ответ, вы соглашаетесь с правилами сайта.