Tôi nên hành động gì khi thêm vai trò và khả năng?


10

Tôi sẽ sử dụng add_role () và $ vai trò-> add_cap () để thiết lập vai trò tùy chỉnh mới và gắn khả năng mới cho các vai trò hiện có.

Tôi đang tự hỏi nơi tốt nhất để làm điều này là ở đâu? Rõ ràng tôi có thể làm điều đó ngay bên trong Hàm.php và được thực hiện với nó. Nhưng đây có phải là thực hành tốt nhất? Tôi chỉ cần làm điều này trên admin_init? hoặc tôi nên làm điều đó trên init?

Tôi không hoàn toàn chắc chắn những gì thực tiễn tốt nhất xung quanh bằng cách sử dụng các hook hành động init thay vì chỉ bỏ một lệnh gọi hàm trực tiếp bên trong hàm.php.

Cảm ơn vì đầu vào của bạn!

Câu trả lời:


10

Khi thêm vai trò và khả năng, bạn chỉ cần chạy mã một lần vì vai trò và khả năng được lưu vào cơ sở dữ liệu khi sử dụng add_rolehoặc ->add_capchức năng, như Andy nói bạn có thể sử dụng after_setup_themecho loại hành động này nhưng chỉ thêm một số loại kiểm tra để nó chỉ chạy một lần, như register_activation_hook hoặc sử dụng các tùy chọn:

add_action('after_setup_theme','my_add_role_function');

function my_add_role_function(){
    $roles_set = get_option('my_roles_are_set');
    if(!$roles_set){
        add_role('my_role', 'my_roleUser', array(
            'read' => true, // True allows that capability, False specifically removes it.
            'edit_posts' => true,
            'delete_posts' => true,
            'upload_files' => true 
        ));
        update_option('my_roles_are_set',true);
    }
}

Cảm ơn vì điều đó. Có đúng là add_role hoặc add_cap LUÔN LUÔN tận dụng cơ sở dữ liệu không? Khi tôi tìm hiểu mã nguồn, dường như không phải lúc nào cũng vậy - tức là: trong hầu hết các phương thức của WP_Roles, có một kiểm tra xem ($ this-> use_db), điều này khiến tôi nghĩ rằng có khả năng vai trò đó có thể không luôn luôn được lưu trữ trong DB.
Tom Auger

Ngoài ra, thay vì đặt cờ bằng các tùy chọn, điều này không khiến tôi đặc biệt có khả năng mở rộng, có cách nào để truy vấn đơn giản liệu vai trò đã được tạo không? Không làm được điều đó, sẽ có hại gì khi xác định lại vai trò nếu nó đã ở đó? Bạn sẽ nhận được một vai trò trùng lặp hoặc nó sẽ bỏ qua? Nhìn lại vào ability.php Tôi thấy điều này trong add_role: if (isset ($ this-> vai trò [$ vai trò])) trở lại; điều này dường như chỉ ra rằng nó sẽ không lặp lại vai trò nên không gây hại gì.
Tom Auger

Không chắc ý của bạn là gì nhưng defualt nằm $use_db = true;trong lớp WP_Roles. và đối với việc đặt cờ bằng các tùy chọn, đây là một ví dụ, bạn có thể sử dụng register_activation_hooknhưng ý tưởng là mã của bạn sẽ chỉ chạy một lần và theo cách đó bạn tiết kiệm thời gian của mình.
Bai Internet

Tôi chưa bao giờ thấy điều này thông qua, nhưng điều gây ấn tượng với tôi là có thể có ý nghĩa khi đưa các thay đổi vai trò vào một plugin và sau đó tận dụng các móc kích hoạt / hủy kích hoạt để kích hoạt các thay đổi chỉ một lần. Có ai đã từng đi xuống tuyến đường đó chưa?
mrwweb

@mrwweb cũng hoạt động tốt
Bai Internet

7

Đối với các plugin, tôi đã thành công khi sử dụng plugins_loadedcho việc này. Đối với chủ đề, tôi sẽ sử dụng after_setup_theme.

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.