Подключение 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');

Аналогичным образом добавляем и другие текстовые поля, либо чек боксы. Мы можем действовать по аналогии и сохранять каждое поле отдельно под своим ключом, либо собирать данные в массим и для каждого юзера хранить все в одном «пакете».

Добавим для примера checkbox

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');

Вообще единого идеального варианта не бывает. выводить и обрабатывать данные можно каждый раз по новому (с индивидуальным подходом). Очень многое зависит от поставленной задачи, от того какие данные Мы выводим и как каждому из нас будет удобнее эти данные обрабатывать. На этом пока все.

Смотреть видео на ютуб канале «Подключение Iris (Айрис) wp color picker (Кастомные поля в профиле пользователя)»

Кастомные поля