Cách không cho phép người dùng tạo thẻ mới, nhưng cho phép họ sử dụng thẻ hiện có


9

Tôi muốn một vai trò nhất định để có thể thêm các thẻ mới, nhưng những người dùng khác chỉ có thể sử dụng thanh văn bản để tìm kiếm các thẻ hiện có.

Tôi biết tôi có thể ẩn thanh thẻ trong thanh bên, nhưng tôi không muốn điều đó. Tôi chỉ muốn nó nói "Xin lỗi, thẻ này không tồn tại" hoặc một cái gì đó khi ai đó nhập vào một thẻ không tồn tại.

Có một plugin hoặc một chức năng sẽ làm điều đó cho tôi?

Câu trả lời:


10

Bạn có thể kết nối pre_insert_term, kiểm tra phân loại và người dùng có vai trò được chỉ định như sau hay không:

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

Điều này sẽ ngăn người dùng chèn các thuật ngữ mới nhưng cho phép họ tìm kiếm và thêm các cụm từ hiện có vào bài đăng.

Beaware mà khi trên màn hình chỉnh sửa bài đăng, người dùng có thể nhập tên thuật ngữ không tồn tại và nhấn enter hoặc nhấp vào nút thêm sẽ thêm thuật ngữ vào DOM, tuy nhiên tại thời điểm này, thuật ngữ này không được thêm vào cơ sở dữ liệu cho đến khi người dùng xuất bản hoặc cập nhật bài đăng tại thời điểm mà thuật ngữ sẽ không được phép.


Xin chào, cảm ơn vì sự giúp đỡ :) Tôi đã thử điều này, nhưng dường như nó không làm gì cả. Tôi sẽ thành thật và nói đó có lẽ là lỗi của tôi. Tôi sao chép dán mã của bạn trong các chức năng của tôi và tất nhiên đã thay đổi bit 'somerole'. Thêm thẻ vẫn có thể cho vai trò đó.
Jorn Reuvers

Vai trò người dùng bạn đang cố gắng ngăn chặn là gì? Ngoài ra, bạn đang cố gắng ngăn chặn các thẻ cho phân loại chính xác, trong trường hợp này post_tagchứ không phải một số phân loại khác như categorieshoặc một số phân loại tùy chỉnh?
Adam

Tôi đang cố gắng ngăn vai trò biên tập viên thực hiện nó vào lúc này. Và đó là phân loại tiêu chuẩn (nên là post_tag), tôi chưa tạo ra bất cứ điều gì khác khi tôi vẫn đang thử nghiệm.
Jorn Reuvers

Đã đến lúc bắt đầu gỡ lỗi rồi. Trong wp-config.phpthiết lập các hằng số sau đây, define('WP_DEBUG', true);, define('WP_DEBUG_LOG', true);, và define('WP_DEBUG_DISPLAY', false);sau đó trong hàm đoạn mã trên, ghi lại một cuộc gọi đến error_log($taxonomy);và cuộc gọi khác đến error_log(implode(', ', $user->roles));sau đó thêm một thẻ sau đó cập nhật bài viết, này sau đó sẽ tạo ra một debug.logtập tin trong wp-contentthư mục. Bạn cần tìm hiểu xem hàm này có được gọi hay không và liệu nó có nhập đúng câu lệnh điều kiện hay không bởi vì hàm gọi lại này hoạt động với tôi.
Adam

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.