Tambahkan kotak meta tag WordPress default ke Profil Pengguna


8

Saya telah menyiapkan profil pengguna saya untuk memungkinkan taksonomi kustom mengikuti tutorial ini .

Idealnya, saya ingin menggunakan kotak meta Tag default dari layar Post, sehingga pengguna dapat dengan mudah menambahkan istilah baru dan menemukan yang umum digunakan. Saat ini saya menggunakan daftar kotak centang, tetapi ini bisa sangat lama karena kami akan memiliki sejumlah taksonomi. Bisakah saya entah bagaimana menggunakan post_tags_meta_box()? Saya sudah melihat ke dalam add_meta_box()tetapi itu tidak berhasil 'user'.


2
+1 untuk tautan itu ... tidak tahu Anda bisa menambahkan taksonomi ke pengguna!
Michael Lewis

Bisakah Anda benar-benar menunjukkan apa yang sudah Anda coba? Maksud saya "tunjukkan dengan kode Anda yang tidak berfungsi".
kaiser

@kaiser Satu-satunya kode yang benar-benar saya coba adalah add_meta_box () tetapi hanya dapat digunakan pada tipe posting, bukan objek pengguna.
epschmidt

Sebagai sidenote, taksonomi dapat ditambahkan ke apa pun yang memiliki ID, termasuk komentar, pengguna, posting, atau bahkan taksonomi itu sendiri. Ini juga karena istilah taksonomi terkait ID tetapi tidak membuat asumsi tentang apa ID itu mewakili di luar format data. Fungsi-fungsi di ataslah yang membuat asumsi-asumsi itu
Tom J Nowell

Jawaban:


1

Sayangnya, saya katakan jawabannya tidak.

Anda dapat membajak (menyalin + menempel) kode dari post_categories_meta_box()dan mencoba menyesuaikannya dengan pengguna, namun Anda akan menghabiskan lebih banyak waktu untuk mencoba menghubungkan kembali semua bagian. Saya cukup yakin kotak meta pos menggunakan ajax untuk menyimpan dan menambahkan istilah baru, jadi Anda harus membajak beberapa javascript dan memodifikasinya juga.

Saya pikir taruhan terbaik Anda adalah melanjutkan jalan yang Anda lalui. Anda dapat menambahkan overflow:scroll;properti css ke wadah kotak centang Anda agar tidak terlalu lama.

Saya membalikkan rekayasa kotak meta pos untuk ujung depan beberapa bulan yang lalu, dan itu tidak terlalu sulit. Saya tidak akan menyarankan mencoba menggunakan kembali fungsi markup dan php dari inti sekalipun. Sebaliknya, gunakan itu sebagai panduan jika Anda mengalami kesulitan.


Saya pergi ke jalur mencoba menarik kode dari kotak Tag di post_tags_meta_box () dari inti dan menambahkannya ke profil pengguna. Tapi Anda benar, ada beberapa hal javascript dan ajax terjadi yang saya perlu menyalin juga yang akan membuat ini lebih rumit daripada yang saya butuhkan. Saya pikir saya hanya akan membuat jenis posting kustom 'Anggota' dan menerbitkan posting ketika pengguna terdaftar dan menggunakan taksonomi dengan itu.
epschmidt

1

Jawaban singkat untuk hanya membuat sketsa apa yang perlu dilakukan:

  1. WP menggunakan javascript untuk menambahkan semua keajaiban ke kotak meta (seret & lepas, lipat, dll.) -> Anda harus wp_enqueue_script( 'posts' );(atau bagaimana pun pegangan skrip dipanggil).
  2. Anda akan memerlukan pengait yang memungkinkan mendaftarkan kotak meta.
  3. Ada MarkUp khusus (sebagian besar wadah dan semacamnya) yang perlu ditampilkan di layar profil pengguna.

1

Kode ini berfungsi untuk saya. Ini menggunakan taksonomi khusus 'lokasi' dan javascript 'sarankan'. Anda perlu memperpanjang untuk mendukung beberapa pilihan jangka .

Tambahkan bidang khusus ke layar edit pengguna dan simpan metadata ketika pengguna / admin memperbarui profil

// 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 menyarankan javascript hanya untuk layar edit pengguna (dengan asumsi Anda menggunakan ini dalam tema khusus)

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: ","
    });
});
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.