デフォルトのWordPressタグメタボックスをユーザープロファイルに追加する


8

このチュートリアルに従って、カスタム分類を許可するようにユーザープロファイルを設定しました。

理想的には、投稿画面からデフォルトのタグメタボックスを使用して、ユーザーが新しい用語を簡単に追加し、よく使用される用語を見つけられるようにしたいと考えています。現在チェックボックスリストを使用していますが、いくつかの分類法があるため、これは非常に長くなる可能性があります。どういうわけpost_tags_meta_box()か?調べましたadd_meta_box()が、うまくいきません'user'


2
そのリンクの+1 ...ユーザーに分類法を追加できることを知りませんでした!
マイケルルイス

実際に試したことをお見せください。「機能していないコードを表示する」という意味です。
カイザー2013

@kaiser実際に試したコードはadd_meta_box()だけでしたが、ユーザーオブジェクトではなく、投稿タイプでのみ使用できます。
epschmidt 2013

補足として、分類は、コメント、ユーザー、投稿、または分類自体など、IDを持つすべてのものに追加できます。これは、分類用語がIDに関連付けられているためです。ただし、そのIDが何を表しているかについては、データ形式以外のものではありません。これらの仮定を行うのは、一番上の関数です
トムJノーウェル

回答:


1

残念ながら、答えはノーです。

コードをハイジャック(コピー+貼り付け)post_categories_meta_box()してユーザーに適応させることもできますが、すべての部分を再接続するために多くの時間を費やすことになります。ポストメタボックスはajaxを使用して新しい用語を保存および追加するので、JavaScriptをハイジャックして変更する必要があります。

あなたの最善の策は、あなたが進んでいる道を進み続けることだと思います。overflow:scroll;チェックボックスコンテナーにcssプロパティを追加して、長くなりすぎないようにすることができます。

数か月前にフロントエンドのポストメタボックスをリバースエンジニアリングしましたが、それほど難しくありませんでした。ただし、マークアップとphp関数をコアから再利用することはお勧めしません。行き詰まった場合は、代わりにガイドとして使用してください。


コアからpost_tags_meta_box()のタグボックスからコードをプルしてユーザープロファイルに追加しようとする道を進みました。しかし、あなたが正しい、私がコピーする必要があるいくつかのjavascriptとajaxのものが進行中であるため、これは必要以上に複雑になります。「メンバー」カスタム投稿タイプを作成し、ユーザーが登録されたときに投稿を公開し、代わりに分類法を使用すると思います。
epschmidt 2013

1

何をする必要があるかをスケッチするだけの簡単な答え:

  1. WPはJavaScriptを使用してすべての魔法をメタボックスに追加します(ドラッグアンドドロップ、折りたたみなど)->必要がありますwp_enqueue_script( 'posts' );(またはそのスクリプトハンドルが呼び出されました)。
  2. メタボックスを登録できるフックが必要です。
  3. ユーザープロファイル画面にレンダリングする必要がある特定のMarkUp(主にコンテナーなど)があります。

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

エンキューは、ユーザー編集画面のみの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: ","
    });
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.