Добавьте метатекст тега WordPress по умолчанию в профиль пользователя

Я настроил свои профили пользователей, чтобы разрешить пользовательские таксономии после этого руководства .

В идеале я бы хотел использовать метатекст Tag по умолчанию на экране Post, чтобы пользователи могли легко добавлять новые термины и находить часто используемые. В настоящее время я использую список флажков, но это может занять очень много времени, поскольку у нас будет ряд таксономий. Могу ли я каким-то образом использовать post_tags_meta_box() ? Я просмотрел add_meta_box() но это не работает на 'user' .

К сожалению, я бы сказал, что ответ – нет.

Вы можете захватить (скопировать + вставить) код из post_categories_meta_box() и попытаться адаптировать его к пользователю, однако вы потратили больше времени на повторное подключение всех частей. Я уверен, что метатеги сообщений используют ajax для сохранения и добавления новых терминов, поэтому вам придется захватить некоторый javascript и изменить это.

Я считаю, что лучше всего продолжать путь вниз. Вы можете добавить overflow:scroll; css для вашего контейнера флажка, чтобы он не становился слишком длинным.

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

Краткий ответ, чтобы только набросать, что нужно сделать:

  1. WP использует javascript, чтобы добавить все волшебство в мета-поля (drag & drop, folding и т. Д.) -> вам нужно wp_enqueue_script( 'posts' ); (или, тем не менее, этот дескриптор скрипта был вызван).
  2. Вам понадобятся крючки, позволяющие регистрировать мета-поля.
  3. Существует специальный MarkUp (в основном, контейнеры и т. Д.), Которые нужно отображать на экране профиля пользователя.

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

Добавление пользовательского поля в экран редактирования пользователя и сохранение метаданных при обновлении профиля пользователя / администратора

 // for account owner add_action('show_user_profile', 'add_custom_user_profile_fields'); add_action('personal_options_update', 'save_custom_user_profile_fields'); // for admins add_action('edit_user_profile', 'add_custom_user_profile_fields'); add_action('edit_user_profile_update', 'save_custom_user_profile_fields'); function add_custom_user_profile_fields($user) { printf( ' <h3>%1$s</h3> <table class="form-table"> <tr> <th><label for="location">%2$s</label></th> <td> <input type="text" name="location" id="location" value="%3$s" class="regular-text" /> <br /><span class="description">%4$s</span> </td> </tr> </table> ', __('Extra Profile Information', 'locale'), __('Location', 'locale'), esc_attr(get_user_meta($user->ID, 'location', true)), __('Start typing location name.', 'locale') ); } function save_custom_user_profile_fields($user_id) { if (!current_user_can('edit_user', $user_id)) return FALSE; $location_name = ( isset($_POST['location']) ) ? $_POST['location'] : ''; // use your taxonomy name instead of 'locations' $location = get_term_by('name', $location_name, 'locations'); // human readable value and id update_user_meta($user_id, 'location', $location_name); update_user_meta($user_id, 'location_id', $location->term_id); } 

Enqueue предлагает javascript только для пользовательского экрана редактирования (если вы используете его в пользовательской теме)

 function admin_scripts($hook) { $screen = get_current_screen(); if ('user-edit' == $screen->id) { wp_enqueue_script( 'user-edit-tag', get_stylesheet_directory_uri() . '/js/usermeta.js', array('suggest'), '20140509', true ); } } 

usermeta.js

 jQuery(document).ready(function($) { // use 'tax=your_taxonomy_name' instead of 'tax=locations' $('#location').suggest(ajaxurl+"?action=ajax-tag-search&tax=locations",{ multiple:false, multipleSep: "," }); });