Подключение Iris (Айрис) wp color picker (Кастомные поля в профиле пользователя).
Рассмотрим возможность подключения wp color picker в профиле пользователя. В целом подход во всех случаях одинаков, за исключением некоторых моментов. Например, для подключения в виджетах может понадобиться подключение скрипта в самой форме, т.к. обновление виджета происходит без перезагрузки страницы. Но об этом в другой раз. Итак, для подключения wp color picker необходимо первым делом добавить поддержку, подключив необходимые стили и скрипты с использованием события admin_enqueue_scripts
add_action('admin_enqueue_scripts','load_admin_styles_scripts'); if(!function_exists('load_admin_styles_scripts')){ function load_admin_styles_scripts(){ wp_enqueue_style('wp-color-picker'); wp_enqueue_script('wp-color-picker'); }}
В этом же событии, admin_enqueue_scripts, мы можем подключить свой файл скрипта с помощью функции wp_enqueue_script, либо добавить в подвал админки теги script и в них подключить нужные нам поля форм к «Айрис», например, через className wpColorChoose
if(!function_exists('admin_footer_script')){ function admin_footer_script(){?> <script type="text/javascript"> jQuery(document).ready(function($){ $('.wpColorChoose').wpColorPicker();}); </script><?php }} add_action('admin_footer','admin_footer_script',99);
Теперь когда добавлена поддержка «Айрис», добавим color picker пользователям. Использовать необходимо два события, т.к. помимо того, что пользователь заходит к себе, его профиль может редактировать администратор — для вывода поля два события: show_user_profile и edit_user_profile, а для обработки данных personal_options_update и edit_user_profile_update. При этом я проверяю присутствие на соответствующей странице через global $pagenow, а так же добавляю nonce поля, не смотря на то, что в формах админки они присутствуют
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; $color=get_the_author_meta('myColor',$id);//получаем мета данные с ключом myColor для текущего пользователя echo'<input name="myColor" id="color" type="text" class="wpColorChoose" value="'.$color.'">'; }}} 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 поля $myColor=get_the_author_meta('myColor',$user_id);//получаем мета данные с ключом myColor для текущего пользователя $newColor=$_POST['myColor'];//проверяем передачу пост данных... можно доп. обработать фильтрами в зависимости от типа данных if(empty($newColor)){//если данные пустые удалим мета delete_user_meta($user_id,'myColor'); }else{//иначе сохраним в мета update_user_meta($user_id,'myColor',$newColor);}}} add_action('personal_options_update','save_VAB_user_fields'); add_action('edit_user_profile_update','save_VAB_user_fields');
Аналогичным образом добавляем и другие текстовые поля, либо чек боксы. Мы можем действовать по аналогии и сохранять каждое поле отдельно под своим ключом, либо собирать данные в массим и для каждого юзера хранить все в одном «пакете».
if(!function_exists('VAB_user_fields2')){ function VAB_user_fields2($user){ global $pagenow; if($pagenow=='profile.php'||$pagenow=='user-edit.php'){ wp_nonce_field('VAB_mode_ufields_nonce','VAB_ufields_nonce'); $id=$user->ID; $uMeta=get_the_author_meta('uMeta',$id);//получаем мета данные с ключом myColor для текущего пользователя $myCheckbox=isset($uMeta['myCheckbox'])?'checked="checked"':''; $myColor=isset($uMeta['myColor'])?$uMeta['myColor']:''; echo'<input name="uMeta[myCheckbox]" id="myCheckbox" type="checkbox" '.$myCheckbox.'>'; echo'<br><br>'; echo'<input name="uMeta[myColor]" id="myColor" type="text" class="wpColorChoose" value="'.$myColor.'">'; }}} add_action('show_user_profile','VAB_user_fields2'); add_action('edit_user_profile','VAB_user_fields2');
Далее все данные необходимо обработать
if(!function_exists('save_VAB_user_fields2')){ function save_VAB_user_fields2($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 поля $uMeta=get_the_author_meta('uMeta',$user_id);//получаем мета данные с ключом myColor для текущего пользователя $newuMeta=$_POST['uMeta'];//проверяем передачу пост данных... можно доп. обработать фильтрами в зависимости от типа данных if(empty($newuMeta['myCheckbox'])&&empty($newuMeta['myColor'])){//если данные пустые удалим мета delete_user_meta($user_id,'uMeta'); }else{//иначе сохраним в мета update_user_meta($user_id,'uMeta',$newuMeta);}}} add_action('personal_options_update','save_VAB_user_fields2'); add_action('edit_user_profile_update','save_VAB_user_fields2');
Вообще единого идеального варианта не бывает. выводить и обрабатывать данные можно каждый раз по новому (с индивидуальным подходом). Очень многое зависит от поставленной задачи, от того какие данные Мы выводим и как каждому из нас будет удобнее эти данные обрабатывать. На этом пока все.