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

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

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

7 голосов | спросил epschmidt 6 AM00000010000001131 2013, 01:58:11

3 ответа


1

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

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

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

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

ответил Michael Lewis 6 AM00000020000002431 2013, 02:07:24
1

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

  1. WP использует javascript для добавления всего магии в мета-поля (drag & drop, folding и т. д.) -> Вам нужно будет wp_enqueue_script( 'posts' ); (или, однако, этот дескриптор скрипта был вызван).
  2. Вам понадобятся крючки, позволяющие регистрировать мета-поля.
  3. Определенный MarkUp (в основном, контейнеры и т. д.), которые необходимо отобразить на экране профиля пользователя.
ответил kaiser 6 PM00000060000003431 2013, 18:34:34
1

Этот код работает для меня. Он использует пользовательскую таксономию «местоположения» и «предлагать» 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: ","
    });
});
ответил user51434 9 Mayam14 2014, 09:31:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132