Cara tidak mengizinkan pengguna membuat tag baru, tetapi mengizinkan mereka menggunakan tag yang ada

9

Saya ingin peran tertentu untuk dapat menambahkan tag baru, tetapi pengguna lain hanya dapat menggunakan bilah teks untuk mencari tag yang ada.

Saya tahu saya bisa menyembunyikan bilah tag di bilah sisi, tapi saya tidak mau itu. Saya hanya ingin mengatakan "Maaf, tag ini tidak ada" atau sesuatu ketika seseorang memasukkan tag yang tidak ada.

Apakah ada plugin atau fungsi yang akan melakukannya untuk saya?

Jorn Reuvers
sumber

Jawaban:

10

Anda dapat menghubungkan ke pre_insert_term, memeriksa taksonomi dan apakah pengguna memiliki peran yang ditentukan sebagai berikut:

function disallow_insert_term($term, $taxonomy) {

    $user = wp_get_current_user();

    if ( $taxonomy === 'post_tag' && in_array('somerole', $user->roles) ) {

        return new WP_Error(
            'disallow_insert_term', 
            __('Your role does not have permission to add terms to this taxonomy')
        );

    }

    return $term;

}

add_filter('pre_insert_term', 'disallow_insert_term', 10, 2);

Ini akan mencegah pengguna memasukkan istilah baru tetapi memungkinkan mereka untuk mencari dan menambahkan istilah yang ada ke posting.

Ketahuilah bahwa ketika pada layar edit posting pengguna dapat memasukkan nama istilah yang tidak ada dan tekan enter atau klik tombol add yang akan menambahkan istilah ke DOM namun pada saat ini istilah tersebut tidak ditambahkan ke database sampai pengguna menerbitkan atau memperbarui pos di mana istilah tersebut tidak diizinkan.

Adam
sumber
Hai, terima kasih atas bantuannya :) Saya sudah mencoba ini, tetapi sepertinya tidak melakukan apa-apa. Saya akan jujur ​​dan mengatakan itu mungkin salah saya sendiri. Saya menyalin kode yang Anda tempel di fungsi saya dan tentu saja mengubah bit 'somerole'. Menambahkan tag masih dimungkinkan untuk peran itu.
Jorn Reuvers
Apa peran pengguna yang Anda coba cegah? Juga apakah Anda mencoba untuk mencegah tag untuk taksonomi yang benar, dalam hal ini post_tagdan bukan taksonomi lain seperti categoriesatau taksonomi kustom?
Adam
Saya mencoba untuk mencegah peran editor melakukannya saat ini. Dan itu adalah taksonomi standar (jadi seharusnya post_tag), saya belum membuat yang lain karena saya masih menguji.
Jorn Reuvers
Saatnya memulai debugging. Dalam wp-config.phpmengatur konstanta berikut, define('WP_DEBUG', true);, define('WP_DEBUG_LOG', true);, dan define('WP_DEBUG_DISPLAY', false);kemudian dalam fungsi potongan di atas, log panggilan ke error_log($taxonomy);dan panggilan lain untuk error_log(implode(', ', $user->roles));kemudian menambahkan tag kemudian memperbarui posting, ini kemudian akan membuat debug.logfile dalam wp-contentdirektori. Anda perlu mengetahui apakah fungsi ini dipanggil atau tidak atau tidak memasukkan pernyataan kondisional dengan benar karena panggilan balik ini berfungsi untuk saya.
Adam