Làm cách nào để thêm Khả năng cho Vai trò Người dùng?


14

Tôi đang quản lý mạng Wordpress và muốn thêm khả năng người dùng chưa được lọc_html vào vai trò người dùng đã được xác định trước của Quản trị viên. Trong bản cài đặt Wordpress tiêu chuẩn, tài khoản Quản trị viên đã có khả năng này nhưng trong bản cài đặt MU, chỉ có Quản trị viên Siêu cấp mới có khả năng này. Vai trò và khả năng của Wordpress .

Làm cách nào tôi có thể tăng vai trò Quản trị viên từ trong một chủ đề hoặc plugin?


1
wordpress.org/extend/plugins/unfiltered-mu có vẻ như nó có thể giúp đỡ. Nhưng nó hoạt động cho quản trị viên và biên tập viên. Nếu điều đó không mong muốn, có thể mã có thể được điều chỉnh một chút?
Mục sư Voodoo


@Rev. Voodoo Cảm ơn lời đề nghị. Điều này đã giúp làm sáng tỏ chủ đề vì việc thêm khả năng của uniltered_html là không đủ để cho phép một vai trò khác ngoài Admin hoặc Super admin khả năng đăng bài nhúng, v.v. Khóa này không lọc / móc nối Wordpress 'KSES: kíp_remove_filters ()
Jonnybojangles

Một blog chi tiết: goo.gl/xNuafH
Suresh Kamrushi

Câu trả lời:


14

Bạn có thể sử dụng lớp WP_Role ,

// get the the role object
$role_object = get_role( $role_name );

// add $cap capability to this role object
$role_object->add_cap( $capability_name );

// remove $cap capability from this role object
$role_object->remove_cap( $capability_name );

Vì vậy, để giải quyết câu hỏi ban đầu của bạn về cách cho phép Quản trị viên nhập thẻ SCRIPT và IFRAME vào nội dung bài đăng, bạn đang tìm kiếm khả năng 'uniltered_html', trong Multisite chỉ được cấp cho Siêu quản trị viên.

// get the the role object
$admin_role = get_role( 'administrator' );
// grant the unfiltered_html capability
$admin_role->add_cap( 'unfiltered_html', true );

hoặc bạn có thể chạy nó một lần trong các chức năng của bạn:

/* Roles & Capabilities */
add_role('professional', 'Professional User', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //last in array needs no comma!
));

Cảm ơn Philip. Liên quan đến lớp WP_Role khi nào nên thực thi mã? Tôi đoán điều này ảnh hưởng đến đối tượng vai trò toàn cầu? Tôi rất vui vì bạn đã đưa ra khối mã thứ hai đề cập rằng tôi có thể chạy mã này một lần trong tệp chức năng của mình. Tôi đã tìm thấy các giải pháp tương tự trên một số diễn đàn hỗ trợ Wordpress nhưng tôi thấy thật kỳ quặc khi đã chạy một lần mã trong một chủ đề hoặc plugin. Đặc biệt là không kiểm tra xem có thay đổi hay không. Có lẽ vai trò viết thực sự không đáng kể. Để kiểm tra khả năng và chỉ viết khả năng cho vai trò như ví dụ đầu tiên của bạn cho thấy.
Jonnybojangles

Tôi cũng quan tâm đến cách bạn sẽ thực thi lớp WP_Role nếu bạn có thời gian rảnh để nói với chúng tôi. Cảm ơn
Osu

1
@Jonnybojagles & @Osu, hãy xem điều này: Hướng dẫn cơ bản về vai trò & khả năng garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities
Philip

Tôi đã đọc bài báo đó trong quá trình theo đuổi của tôi, nhưng tôi đã tận dụng cơ hội để chạy qua tất cả một lần nữa, cảm ơn bạn! Cuối cùng, sau khi mổ xẻ plugin chưa được lọc (được đề cập ở trên bởi Rev. Voodoo), cuối cùng tôi phát hiện ra rằng thay đổi vai trò bằng cách thêm các khả năng là không đủ. Tôi cần phải lọc các bộ lọc KSES của Wordpress.
Jonnybojangles

Tôi thích thêm dấu phẩy cho phần tử cuối cùng trong mảng. Mặc dù có vẻ không liên quan vì không cần thiết phải làm cho mã hoạt động cũng như không gây ra lỗi, nhưng nó rất hữu ích khi sử dụng điều khiển phiên bản khi hiển thị các sửa đổi; bạn sẽ không thấy một dòng cũ của mục mảng bị xóa, thêm lại và tô sáng như mới chỉ bằng dấu phẩy dưới dạng bổ sung hoặc thay đổi được thực hiện cho dòng đó. Mặc dù ít, nhưng nó giúp tiết kiệm rất nhiều thời gian khi phân tích sửa đổi.
nyedidikeke

2

Để cho phép một vai trò khác ngoài Super Admin hoặc Admin (tùy thuộc vào việc cài đặt Wordpress có phải là mạng / MU hay không) để thêm html chưa được lọc vào bài đăng hoặc nhận xét Bộ lọc KSES của Wordpress phải được xóa.

Kiểm tra nếu một người dùng có một khả năng cụ thể.

if ( current_user_can( 'unfiltered_html' ) ) {  }

Nếu vậy hơn loại bỏ KSES

kses_remove_filters();

Chức năng này đã được gói trong mu chưa được lọc, cho phép quản trị viên và người chỉnh sửa thêm html chưa được lọc.


Các chức năng cũng được gói trong một thanh ghi plugin và hủy đăng ký để logic không cần phải được định dạng trước trên mỗi phiên bản WP.
Jonnybojangles
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.