Дополнительная информация в профиле пользователя WordPress. Произвольные поля WordPress
Продолжаем говорить на тему «Произвольных полей WordPress», а точнее «Произвольных полей в профиле пользователя WordPress». В данной статье рассмотрим вариант как вывести подробную дополнительную информацию в профиле пользователя WordPress в виде таблицы с дальнейшим выводом информации, например, в архивах автора. При этом дадим возможность пользователю управлять публичностью этих данных, а так же с возможностью разрешать администраторам, либо запрещать управлять публичностью этих данных.
Как обычно для вывода нужных Нам полей будем использовать два события: show_user_profile и edit_user_profile. А для обработки данных personal_options_update и edit_user_profile_update.
if(!function_exists('VAB_user_fields')){ function VAB_user_fields($user){ global $pagenow;//обращаемся к глобальной переменной pagenow if($pagenow=='profile.php'||$pagenow=='user-edit.php'){//проверяем, находимся ли Мы в своем профиле(profile.php), либо зашли как админ редактировать чей-то профиль(user-edit.php) wp_nonce_field('VAB_mode_ufields_nonce','VAB_ufields_nonce');//добавляем нонс поля $id=$user->ID;//получаем айди пользователя, на странице которого находимся ...
Далее создадим переменную «$meta» и получим в неё мета данные текущего пользователя с ключом «admEdit». Это будет чек бокс для разрешения, либо запрета админам управлять публичностью данных.
$meta=get_the_author_meta('admEdit',$id);
После создадим ещё одну переменную «$Cek», в которой, при наличии данных в «$meta», будет лежать атрибут checked=»checked», либо пусто при отсутствии данных.
$Cek=isset($meta['1'])?'checked="checked"':'';
Переменная «$plh» — просто текст для placeholder`ов
$plh=__('Поле для ввода текста','VAB');
Далее напишим немного стилей для чек боксов в каждой строке таблицы (для возможности перевода на любой язык)
echo '<style type="text/css">.VAB_user_fields input[type="checkbox"]:before{content:"'.__('Открытый','VAB').'";}.VAB_user_fields input[type="checkbox"]:after{content:"'.__('Закрытый','VAB').'";}</style>';
А остальные стили для них можно закинуть в какой-нибудь файл css
.VAB_user_fields th{text-align:center;} .VAB_user_fields .VAB_FH th,.VAB_user_fields td,.VAB_fBottom{border:1px dotted #A8A8A8;} .VAB_user_fields input[type="checkbox"]{position:relative;width:100%;min-width:220px;height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;float:right;display:block;overflow:hidden;cursor:pointer;border:2px solid #ddd;border-radius:20px;padding:0;margin:0;font-size:13px;} .VAB_user_fields input[type="checkbox"]{display:inline-block;} .VAB_user_fields input[type="checkbox"]:before,.VAB_user_fields input[type="checkbox"]:after{width:50%;height:28px;text-align:center;display:inline-block;font:inherit;} .VAB_user_fields input[type="checkbox"]:before{background-color:#EEEEEE;color:#999999;padding-top:12px;} .VAB_user_fields input[type="checkbox"]:after{background-color:#2885bb;color:#FFFFFF;padding-top:12px;} .VAB_user_fields input[type="checkbox"]:checked:before{width:50%;background-color:#2885bb;color:#FFFFFF;padding-top:14px;} .VAB_user_fields input[type="checkbox"]:checked:after{width:51%;background-color:#EEEEEE;color:#999999;padding-top:10px;} .VAB_user_fields input::placeholder{color:#A8A8A8;}
Далее начинаем отрисовывать таблицу с чек боксом для разрешения управлять публичностью админам, а так же основной таблицы с заголовочными ячейками
$Ed=$pagenow=='profile.php'||($pagenow=='user-edit.php'&&isset($meta['1']))?'<table><tr><td><label for="admEdit"><input type="checkbox" name="admEdit" id="admEdit" '.$Cek.'/> '.__('Разрешить администраторам управлять публичностью данных','VAB').'</label></td></tr></table>':''; $TH=$pagenow=='profile.php'||($pagenow=='user-edit.php'&&isset($meta['1']))?'<th>'.__('Публичный доступ','VAB').'</th>':''; echo'<h3>'.__('Дополнительная информация','VAB').'</h3>'.$Ed.'<table class="VAB_user_fields form-table"><tr class="VAB_FH"><th>'.__('Наименование','VAB').'</th><th>'.__('Информация','VAB').'</th>'.$TH.'</tr>';
Таблица в переменной «$Ed» с чек боксом «admEdit» будет отображаться только в личном профиле $pagenow==’profile.php’, либо так же у админов, но при условии, что в базе метаданные с ключом «admEdit» будут в наличии ($pagenow==’user-edit.php’&&isset($meta[‘1’])), т.е. пользователь разрешил управлять публичностью.
Переменная «$TH» — заголовочная ячейка в основной таблице с информацией. Это третий столбик с чек боксами для управления публичностью, который так же не должен отображаться, если нет разрешения на управление публичностью.
Далее необходимо выводить сами строки таблицы с той или иной информацией и чек боксами для управления публичностью. Я решил выводить их через небольшой «шаблон» ООП
class VAB_UPrFields{ function __construct($opt,$id,$text,$type,$place){ global $pagenow; $meta=get_the_author_meta('admEdit',$id); $optV=get_the_author_meta(''.$opt.'',$id); $VaL=isset($optV['0'])?$optV['0']:''; $Cek=isset($optV['1'])?'checked="checked"':''; $place=$place?'placeholder="'.$place.'"':''; $Type=$type=='area'?'<textarea cols="22" '.$place.' name="'.$opt.'[]" id="'.$opt.'" value="">'.esc_textarea($VaL).'</textarea>':($type=='date'?'<input name="'.$opt.'[]" id="'.$opt.'" type="date" '.$place.' value="'.esc_attr($VaL).'">':'<input type="text" '.$place.' size="44" name="'.$opt.'[]" id="'.$opt.'" value="'.esc_attr($VaL).'"/>'); $kbox=$pagenow=='profile.php'||($pagenow=='user-edit.php'&&isset($meta['1']))?'<td width="20%"><label for="'.$opt.'Show"><input type="checkbox" name="'.$opt.'[]" id="'.$opt.'Show" '.$Cek.'/><br></label></td>':''; echo'<tr><td width="20%"><label for="'.$opt.'">'.$text.'</label></td><td>'.$Type.'</td>'.$kbox.'</tr>';}}/*$VABField=new VAB_UPrFields('',id,__('','VAB'),'','');*/
Все довольно просто и скромно. Создаем class VAB_UPrFields, передаем в конструктор данные и через него же выводим строку на экран с помощью echo.
Переданные данные:
- $opt — ключевой идентификатор для атрибута «name», который будет хранить в себе (в базе данных) массив (с ключом 0 — конкретная информация о пользователе, с ключом 1 — чек бокс разрешающий публичность этих данных)
- $id — идентификатор пользователя для получения данных из базы
- $text — какой-либо текст рядом с информационным полем (например: «Дата рождения», «Мой мобильный», «Улица», «Дом/квартира»)
- $type — какое поле будет отображаться (textarea, либо type=»date» для выбора даты рождения через календарик, либо просто текстовое поле type=»text»)
- $place — placeholder
Переменная «$kbox» это таже третья ячейка с чек боксами, которая не должна по умолчанию отображаться у администраторов.
$VABField=new VAB_UPrFields('birth',$id,__('Дата рождения','VAB'),'date',''); $VABField=new VAB_UPrFields('phone',$id,__('Мой мобильный','VAB'),'phone',__('формат','VAB').': +7 xxxxxxxxxx'); $VABField=new VAB_UPrFields('region',$id,__('Область','VAB'),'',$plh); $VABField=new VAB_UPrFields('city',$id,__('Город (населенный пунк)','VAB'),'',$plh); $VABField=new VAB_UPrFields('street',$id,__('Улица','VAB'),'',$plh); $VABField=new VAB_UPrFields('home',$id,__('Дом/квартира','VAB'),'',$plh); $VABField=new VAB_UPrFields('index',$id,__('Почтовый индекс','VAB'),'',$plh); $VABField=new VAB_UPrFields('education',$id,__('Уровень образования','VAB'),'',$plh); $VABField=new VAB_UPrFields('qualification',$id,__('Квалификация','VAB'),'',$plh); $VABField=new VAB_UPrFields('specialty',$id,__('Специальность','VAB'),'area',$plh); $VABField=new VAB_UPrFields('schools',$id,__('Учебные заведения','VAB'),'area',$plh); $VABField=new VAB_UPrFields('hobby',$id,__('Мое хобби','VAB'),'area',$plh); echo'<tr><th colspan=3>'.__('Мои социальные сети','VAB').'</th></tr>'; $VABField=new VAB_UPrFields('Facebook',$id,__('Фейсбук','VAB'),'',$plh); $VABField=new VAB_UPrFields('discord',$id,__('Дискорд','VAB'),'','Invite '.__('ссылка','VAB')); $VABField=new VAB_UPrFields('Twitter',$id,__('Твиттер','VAB'),'',$plh); $VABField=new VAB_UPrFields('vk',$id,__('ВКонтакте','VAB'),'',$plh); $VABField=new VAB_UPrFields('instagram',$id,__('Инстаграм','VAB'),'',$plh); $VABField=new VAB_UPrFields('ok',$id,__('Одноклассники','VAB'),'',$plh); $VABField=new VAB_UPrFields('YouTube',$id,__('Ютубе','VAB'),'',$plh); $VABField=new VAB_UPrFields('mymail',$id,__('Мой Мир','VAB'),'',$plh); echo'<tr><th colspan=3>'.__('Мои визитки для поддержки','VAB').'</th></tr>'; $VABField=new VAB_UPrFields('paypal',$id,__('PayPal','VAB').' '.__('визитка','VAB'),'',$plh); $VABField=new VAB_UPrFields('yandex',$id,__('Яндекс','VAB').' '.__('визитка','VAB'),'',$plh); echo('<tr class="VAB_fBottom"></tr></table>');
if(!function_exists('VAB_user_fields')){ function VAB_user_fields($user){ global $pagenow; if($pagenow=='profile.php'||$pagenow=='user-edit.php'){ wp_nonce_field('VAB_mode_ufields_nonce','VAB_ufields_nonce'); $id=$user->ID; $meta=get_the_author_meta('admEdit',$id); $Cek=isset($meta['1'])?'checked="checked"':''; $plh=__('Поле для ввода текста','VAB'); echo('<style type="text/css">.VAB_user_fields input[type="checkbox"]:before{content:"'.__('Открытый','VAB').'";}.VAB_user_fields input[type="checkbox"]:after{content:"'.__('Закрытый','VAB').'";}</style>'); $Ed=$pagenow=='profile.php'||($pagenow=='user-edit.php'&&isset($meta['1']))?'<table><tr><td><label for="admEdit"><input type="checkbox" name="admEdit" id="admEdit" '.$Cek.'/> '.__('Разрешить администраторам управлять публичностью данных','VAB').'</label></td></tr></table>':''; $TH=$pagenow=='profile.php'||($pagenow=='user-edit.php'&&isset($meta['1']))?'<th>'.__('Публичный доступ','VAB').'</th>':''; echo('<h3>'.__('Дополнительная информация','VAB').'</h3>'.$Ed.'<table class="VAB_user_fields form-table"><tr class="VAB_FH"><th>'.__('Наименование','VAB').'</th><th>'.__('Информация','VAB').'</th>'.$TH.'</tr>'); $VABField=new VAB_UPrFields('birth',$id,__('Дата рождения','VAB'),'date',''); $VABField=new VAB_UPrFields('phone',$id,__('Мой мобильный','VAB'),'phone',__('формат','VAB').': +7 xxxxxxxxxx'); $VABField=new VAB_UPrFields('region',$id,__('Область','VAB'),'',$plh); $VABField=new VAB_UPrFields('city',$id,__('Город (населенный пунк)','VAB'),'',$plh); $VABField=new VAB_UPrFields('street',$id,__('Улица','VAB'),'',$plh); $VABField=new VAB_UPrFields('home',$id,__('Дом/квартира','VAB'),'',$plh); $VABField=new VAB_UPrFields('index',$id,__('Почтовый индекс','VAB'),'',$plh); $VABField=new VAB_UPrFields('education',$id,__('Уровень образования','VAB'),'',$plh); $VABField=new VAB_UPrFields('qualification',$id,__('Квалификация','VAB'),'',$plh); $VABField=new VAB_UPrFields('specialty',$id,__('Специальность','VAB'),'area',$plh); $VABField=new VAB_UPrFields('schools',$id,__('Учебные заведения','VAB'),'area',$plh); $VABField=new VAB_UPrFields('hobby',$id,__('Мое хобби','VAB'),'area',$plh); echo'<tr><th colspan=3>'.__('Мои социальные сети','VAB').'</th></tr>'; $VABField=new VAB_UPrFields('Facebook',$id,__('Фейсбук','VAB'),'',$plh); $VABField=new VAB_UPrFields('discord',$id,__('Дискорд','VAB'),'','Invite '.__('ссылка','VAB')); $VABField=new VAB_UPrFields('Twitter',$id,__('Твиттер','VAB'),'',$plh); $VABField=new VAB_UPrFields('vk',$id,__('ВКонтакте','VAB'),'',$plh); $VABField=new VAB_UPrFields('instagram',$id,__('Инстаграм','VAB'),'',$plh); $VABField=new VAB_UPrFields('ok',$id,__('Одноклассники','VAB'),'',$plh); $VABField=new VAB_UPrFields('YouTube',$id,__('Ютубе','VAB'),'',$plh); $VABField=new VAB_UPrFields('mymail',$id,__('Мой Мир','VAB'),'',$plh); echo'<tr><th colspan=3>'.__('Мои визитки для поддержки','VAB').'</th></tr>'; $VABField=new VAB_UPrFields('paypal',$id,__('PayPal','VAB').' '.__('визитка','VAB'),'',$plh); $VABField=new VAB_UPrFields('yandex',$id,__('Яндекс','VAB').' '.__('визитка','VAB'),'',$plh); echo('<tr class="VAB_fBottom"></tr></table>'); }}} add_action('show_user_profile','VAB_user_fields'); add_action('edit_user_profile','VAB_user_fields');
Далее по сценарию идет обработка данных. Обработка данных будет начинаться по аналогии с предыдущими статьями. Будем проверять в первую очередь нонс поля.
if(!function_exists('save_VAB_user_fields')){ function save_VAB_user_fields($user_id){ $nonce=filter_input(INPUT_POST,'VAB_ufields_nonce',FILTER_SANITIZE_STRING); if(!$nonce){return;}//проверяем наши nonce поля if(!wp_verify_nonce($nonce,'VAB_mode_ufields_nonce')){return;}//проверяем наши nonce поля ...
В переменную «$admEdit» будем получать данные из базы о нашем чек боксе «admEdit», который разрешает, либо запрещает управление публичностью администраторами. Если пост данные будут пустыми и в базе будут данные, то будем удалять их, используя функцию delete_user_meta(), в противном случае используем функцию update_user_meta(), которая обновляет, либо создает запись в базе при ееё отсутствии.
... $admEdit=get_the_author_meta('admEdit',$user_id); if(empty($_POST['admEdit'])&&isset($admEdit)){ delete_user_meta($user_id,'admEdit'); }else{ update_user_meta($user_id,'admEdit',$_POST['admEdit']);} ...
Далее вновь обратимся к глобальной переменной pagenow, создадим пустую переменную «$erR» для ошибки на случай не корректно введенных данных, а так же создадим массив «$optArray», в который поместим все наши ключевые идентификаторы для атрибутов «name». По сле чего через цикл foreach проверим все наши данные.
... global $pagenow;$erR=''; $optArray=array('birth','phone','region','city','street','home','index','education','qualification','specialty','schools','hobby','Facebook','discord','Twitter','vk','instagram','ok','YouTube','mymail','paypal','yandex'); foreach($optArray as $k){ $meta=get_the_author_meta($k,$user_id);$Pmeta=$_POST[$k]; if(empty($_POST['admEdit'])&&$pagenow=='user-edit.php'&&isset($meta[1])=='on'){$Pmeta[1]=$meta[1];} if(empty($Pmeta[0])&&empty($Pmeta[1])&&isset($meta)){delete_user_meta($user_id,$k);} if(!empty($Pmeta[0])||!empty($Pmeta[1])){ if(!empty($Pmeta[0])&&$k=='phone'){ if(!preg_match("/^\+(79)[\d]{9}$/m",$Pmeta[0])){ $erR='<div class="notice notice-error is-dismissible"><p><strong>'.__('Ошибка','VAB').'</strong>: '.__('Поле','VAB').' «'.__('Мой мобильный','VAB').'» '.__('не обновлено','VAB').' - '.__('Телефон задан в неверном формате','VAB').'</p></div>'; set_transient('erRorUser',array('nonce'=>$erR),10); }else{update_user_meta($user_id,$k,$Pmeta);} }else{update_user_meta($user_id,$k,$Pmeta);}}} ...
Первым делом проверяем наличие в базе данных по ключу и сохраняем в переменной «$meta». Рядом создаем переменную «$Pmeta», в которую будут ложиться переданные $_POST данные, при нажатой кнопке «Обновить профиль». Переменная «$Pmeta» должна быть массивом с ключами 0 и 1. Под нулевым ключом будет храниться сама информация о пользователе, а под единицей чек бокс, при его наличии, который открывает к информации публичность, либо закрывает.
Очень важный момент: если чей-либо профиль редактирует админ ($pagenow==’user-edit.php’) и ему не разрешено управлять публичностью данных, то при нажатии кнопки «Обновить профиль» установленные юзером чек боксы слетят, т.к. их не будет в разметке у админа. Поэтому надо у админа проверить наличие этих данных (чек боксов) в базе и при их наличии подставить в $_POST данные с ключом 1
if(empty($_POST['admEdit'])&&$pagenow=='user-edit.php'&&isset($meta[1])=='on'){$Pmeta[1]=$meta[1];}
Далее проверяем, если переданных данных нет, то подчищаем базу
if(empty($Pmeta[0])&&empty($Pmeta[1])&&isset($meta)){delete_user_meta($user_id,$k);}
Если данные есть, то проверяем ключ и, если это телефон (phone), проверяем его через preg_match(). Если проверка не будет пройдена, формируем ошибку «$erR» и сохраняем в базе через временную опцию set_transient(), для дальнейшего вывода на экран с помощью admin_notices. Ну а далее по обработчику остается только сохранить данные в базе с помощью функции update_user_meta().
if(!function_exists('save_VAB_user_fields')){ function save_VAB_user_fields($user_id){ $nonce=filter_input(INPUT_POST,'VAB_ufields_nonce',FILTER_SANITIZE_STRING); if(!$nonce){return;}//проверяем наши nonce поля if(!wp_verify_nonce($nonce,'VAB_mode_ufields_nonce')){return;}//проверяем наши nonce поля $admEdit=get_the_author_meta('admEdit',$user_id); if(empty($_POST['admEdit'])&&isset($admEdit)){ delete_user_meta($user_id,'admEdit'); }else{ update_user_meta($user_id,'admEdit',$_POST['admEdit']);} global $pagenow;$erR=''; $optArray=array('birth','phone','region','city','street','home','index','education','qualification','specialty','schools','hobby','Facebook','discord','Twitter','vk','instagram','ok','YouTube','mymail','paypal','yandex'); foreach($optArray as $k){ $meta=get_the_author_meta($k,$user_id);$Pmeta=$_POST[$k]; if(empty($_POST['admEdit'])&&$pagenow=='user-edit.php'&&isset($meta[1])=='on'){$Pmeta[1]=$meta[1];} if(empty($Pmeta[0])&&empty($Pmeta[1])&&isset($meta)){delete_user_meta($user_id,$k);} if(!empty($Pmeta[0])||!empty($Pmeta[1])){ if(!empty($Pmeta[0])&&$k=='phone'){ if(!preg_match("/^\+(79)[\d]{9}$/m",$Pmeta[0])){ $erR='<div class="notice notice-error is-dismissible"><p><strong>'.__('Ошибка','VAB').'</strong>: '.__('Поле','VAB').' «'.__('Мой мобильный','VAB').'» '.__('не обновлено','VAB').' - '.__('Телефон задан в неверном формате','VAB').'</p></div>'; set_transient('erRorUser',array('nonce'=>$erR),10); }else{update_user_meta($user_id,$k,$Pmeta);} }else{update_user_meta($user_id,$k,$Pmeta);}}} }} add_action('personal_options_update','save_VAB_user_fields'); add_action('edit_user_profile_update','save_VAB_user_fields');
О Выводе заметок (сообщений, ошибок) в верхней части страницы админ-панели WordPress мы говорили ранее, поэтому заострять внимание не будем. Код по выводу уже знакомый.
if(!function_exists('VAB_add_error')){ function VAB_add_error(){ $data=get_transient('erRorUser');//проверяем в базе наличие временной опции if($data&&$data['nonce']){//проверяем ее содержимое add_action('admin_notices','VAB_show_error');}}}//запускаем событие admin_notices add_action('load-user-edit.php','VAB_add_error'); add_action('load-profile.php','VAB_add_error'); if(!function_exists('VAB_show_error')){ function VAB_show_error(){ $data=get_transient('erRorUser');$erRorMessage=''; if($data&&$data['nonce']){$erRorMessage=$data['nonce'];} echo$erRorMessage;}}//выводим на экран содержимое временной опции
Далее Мы создадим функцию «vab_arhive_author_info», соберем в ней все данные из базы и оформим в какой-либо разметке, а затем создадим событие «vab_author_info» и прикрепим к нему созданную функцию «vab_arhive_author_info»
if(!function_exists('vab_arhive_author_info')){ function vab_arhive_author_info(){ $author=get_user_by('id',get_query_var('author'));//Данные о пользователе...//получаем параметры текущей страницы $author_id=$author->ID; $author_name=get_the_author_meta('display_name',$author_id); $author_avatar=get_avatar(get_the_author_meta('email',$author_id),'82'); $author_description=get_the_author_meta('description',$author_id); $count_user_posts=sprintf(__('В настоящее время','VAB').', %s '.__('создал(а)','VAB').' %s '.__('запись(ей)в блоге','VAB').'.',$author_name,count_user_posts($author_id,array('post','qanda'))); $u_birth=get_the_author_meta('birth',$author_id); $u_birth_out=!empty($u_birth['0'])&&isset($u_birth['1'])?'<tr><td>'.__('Дата рождения','VAB').'</td><td>'.esc_attr($u_birth['0']).'</td></tr>':''; $u_phone=get_the_author_meta('phone',$author_id); $u_phone_out=!empty($u_phone['0'])&&isset($u_phone['1'])?'<tr><td>'.__('Мобильный','VAB').'</td><td>'.esc_attr($u_phone['0']).'</td></tr>':''; $u_region=get_the_author_meta('region',$author_id); $u_city=get_the_author_meta('city',$author_id); $u_street=get_the_author_meta('street',$author_id); $u_home=get_the_author_meta('home',$author_id); $u_index=get_the_author_meta('index',$author_id); $u_region_out=!empty($u_region['0'])&&isset($u_region['1'])?esc_attr($u_region['0']).' '.__('область','VAB').', ':''; $u_city_out=!empty($u_city['0'])&&isset($u_city['1'])?esc_attr($u_city['0']).', ':''; $u_street_out=!empty($u_street['0'])&&isset($u_street['1'])?__('Улица','VAB').' '.esc_attr($u_street['0']).', ':''; $u_home_out=!empty($u_home['0'])&&isset($u_home['1'])?esc_attr($u_home['0']).', ':''; $u_index_out=!empty($u_index['0'])&&isset($u_index['1'])?__('Почтовый индекс','VAB').' '.esc_attr($u_index['0']).', ':''; $u_address_out=!empty($u_region_out)||!empty($u_city_out)||!empty($u_street_out)||!empty($u_home_out)||!empty($u_index_out)?'<tr><td>'.__('Адрес проживания','VAB').'</td><td>'.$u_region_out.$u_city_out.$u_street_out.$u_home_out.$u_index_out.'</td></tr>':''; $u_education=get_the_author_meta('education',$author_id); $u_qualification=get_the_author_meta('qualification',$author_id); $u_specialty=get_the_author_meta('specialty',$author_id); $u_schools=get_the_author_meta('schools',$author_id); $u_education_out=!empty($u_education['0'])&&isset($u_education['1'])?esc_attr($u_education['0']).', ':''; $u_qualification_out=!empty($u_qualification['0'])&&isset($u_qualification['1'])?__('Квалификация','VAB').' - '.esc_attr($u_qualification['0']).' ':''; $u_specialty_out=!empty($u_specialty['0'])&&isset($u_specialty['1'])?__('по специальности','VAB').' «'.esc_attr($u_specialty['0']).'» ':''; $u_schools_out=!empty($u_schools['0'])&&isset($u_schools['1'])?__('Учебные заведения','VAB').': '.esc_attr($u_schools['0']):''; $u_education_all_out=!empty($u_education_out)||!empty($u_qualification_out)||!empty($u_specialty_out)||!empty($u_schools_out)?'<tr><td>'.__('Уровень образования','VAB').'</td><td>'.$u_education_out.$u_qualification_out.$u_specialty_out.$u_schools_out.'</td></tr>':''; $u_hobby=get_the_author_meta('hobby',$author_id); $u_hobby_out=isset($u_hobby['0'])&&isset($u_hobby['1'])&&!empty($u_hobby['0'])?'<tr><td>'.__('Хобби','VAB').'</td><td>'.esc_attr($u_hobby['0']).'</td></tr>':''; $socialsArray=array('vk'=>__('ВКонтакте','VAB'),'discord'=>__('Дискорд','VAB'),'instagram'=>__('Инстаграм','VAB'),'mymail'=>__('Мой Мир','VAB'),'ok'=>__('Одноклассники','VAB'),'Twitter'=>__('Твиттер','VAB'),'Facebook'=>__('Фейсбук','VAB'),'YouTube'=>__('Ютубе','VAB'),);$socvariable=''; foreach($socialsArray as $k=>$v){$u_k=get_the_author_meta($k,$author_id);$socvariable.=!empty($u_k['0'])&&isset($u_k['1'])?' <a href="'.esc_attr($u_k['0']).'" target="_blank">«'.esc_attr($v).'»</a> ':'';} $u_socials_out=!empty($socvariable)?'<tr><td>'.__('Социальные сети автора','VAB').'</td><td>'.$socvariable.'</td></tr>':''; $u_paypal=get_the_author_meta('paypal',$author_id);$u_yandex=get_the_author_meta('yandex',$author_id); $u_paypal_out=!empty($u_paypal['0'])&&isset($u_paypal['1'])?' <a href="'.esc_attr($u_paypal['0']).'" target="_blank">«'.__('PayPal','VAB').' '.__('визитка','VAB').'»</a> ':''; $u_yandex_out=!empty($u_yandex['0'])&&isset($u_yandex['1'])?' <a href="'.esc_attr($u_yandex['0']).'" target="_blank">«'.__('Яндекс','VAB').' '.__('визитка','VAB').'»</a> ':''; $u_vizitki_out=!empty($u_paypal_out)||!empty($u_yandex_out)?'<tr><td>'.__('Визитные карты автора','VAB').'</td><td>'.$u_paypal_out.$u_yandex_out.'</td></tr>':''; $bodyTable=$u_birth_out.$u_phone_out.$u_address_out.$u_education_all_out.$u_hobby_out.$u_socials_out.$u_vizitki_out; $TableInfo=$bodyTable?$bodyTable:__('Дополнительная информация','VAB').' '.__('отсутствует, либо закрыта от публичного просмотра','VAB'); if(empty($author_description)){$author_description=__('Этот автор еще не заполнил Биографию.','VAB').'<br />'.$count_user_posts; }else{$author_description=$author_description.'<br />'.$count_user_posts;}?> <div class="VAB_author_Info"> <div class="VAB_author_avatar"><?php echo $author_avatar;?></div> <div class="VAB_author_Info_Detail"> <h3 class="VAB_author_title"><?php echo __('О авторе','VAB').' '.$author_name.' ';if(current_user_can('edit_users')||get_current_user_id()==$author_id):?> <span class="VAB_edit_profile">(<a href="<?php echo admin_url('profile.php?user_id='.$author_id);?>"><?php _e('Редактировать профиль','VAB');?></a>)</span><?php endif;?> </h3><?php echo $author_description;?> </div> <div style="clear:both;"></div> <div class="VAB_author_social clearfix"> <div class="VAB_author_tagline"><?php echo('<table><tbody>'.$TableInfo.'</tbody></table>');?></div> </div> </div><?php }} add_action('vab_author_info','vab_arhive_author_info',10);
Осталось только эти данные вывести где-то. Это может быть по умолчанию индексный файл (index.php), либо архивная страница (archive.php), либо страница автора (author.php). Код может отличаться в зависимости от поставленной задачи, но примерно будет следующим:
... if(is_author()){ if(have_posts()){ the_post(); printf('<span class="VABKategoriya">'.esc_html__('Архив Автора','VAB').': %s</span>','<a class="url fn n" href="'.esc_url(get_author_posts_url(get_the_author_meta('ID'))).'" title="'.esc_attr(get_the_author()).'" rel="me">'.get_the_author().'</a>'); rewind_posts();//Перематываем цикл в начало, чтобы еще раз использовать have_posts() do_action('vab_author_info');}} ... if(have_posts()): while(have_posts()): the_post();?> <div id="PostPage" <?php post_class();?>> <?php the_title(); the_content(); ?> </div><!-- <div id="PostPage"> --> <?php endwhile; endif; ...
Ну вот и все. Благодарю за внимание!