Cho phép quyền truy cập vai trò tùy chỉnh vào loại bài đăng tùy chỉnh ở phía sau


8

Vì vậy, tôi có một số vấn đề với điều này và tôi không thể hiểu tại sao. Tôi chỉ cần một vai trò tùy chỉnh có thể truy cập blog ở phía sau.

Tôi đã thêm một loại bài đăng mới với loại Khả năng blogvà vai trò người dùng mới với tất cả các giới hạn cho phép quản trị viên truy cập người dùng để thêm / chỉnh sửa loại bài đăng tùy chỉnh. Điều này hoạt động cho quản trị viên và họ có thể truy cập loại bài đăng ở phía sau. Tuy nhiên, người dùng của vai trò tùy chỉnh của tôi hoàn toàn không thể vào được.

Loại bài luận của ghi chú

"capability_type" => 'blog',
"map_meta_cap" => true,

Đăng ký vai trò

function add_blog_manager_role(){
    add_role(
        'blog_manager',
        'Blog Manager',
        array(
            'read' => true,
            'edit_posts' => false,
            'delete_posts' => false,
            'publish_posts' => false,
            'upload_files' => true
        )
    );
}
add_action( 'admin_init', 'add_blog_manager_role', 4 );

Thêm mũ

function add_blog_role_caps() {
    $roles = array('blog_manager', 'editor','administrator');
    foreach($roles as $the_role) {
        $role = get_role($the_role);
        $role->add_cap( 'read' );
        $role->add_cap( 'read_blog');
        $role->add_cap( 'read_private_blog' );
        $role->add_cap( 'edit_blog' );
        $role->add_cap( 'edit_others_blog' );
        $role->add_cap( 'edit_published_blog' );
        $role->add_cap( 'publish_blog' );
        $role->add_cap( 'delete_others_blog' );
        $role->add_cap( 'delete_private_blog' );
        $role->add_cap( 'delete_published_blog' );
    }
}
add_action('admin_init', 'add_blog_role_caps', 5 );

Tôi đã googeling điên cuồng cố gắng tìm ra nguyên nhân của việc này. Tôi đã thử với các mũ số nhiều, không số nhiều, đã thử thêm các khả năng vào các kiểu bài viết. Tuy nhiên tôi không bao giờ có thể vào được phía sau. Tôi không có bất kỳ mã nào khác trong chủ đề có thể đuổi người dùng ra khỏi quản trị viên (Tôi đã xóa mã của chính mình đã loại bỏ họ trong khi kiểm tra mã này)

Chỉnh sửa Tại đây, bạn có thể thấy một loạt các khả năng của blog_manager từ cơ sở dữ liệu, có một chút kiểm tra BS còn lại trong đó, không nên ngăn họ đăng nhập từ những gì tôi biết.

'blog_manager' => array (
    'name' => 'Blog Manager',
    'capabilities' => array (
        'read' => true,
        'edit_posts' => false,
        'delete_posts' => false,
        'publish_posts' => false,
        'upload_files' => true,
        'read_blog' => true,
        'read_private_blog' => true,
        'edit_blog' => true,
        'edit_others_blog' => true,
        'edit_published_blog' => true,
        'publish_blog' => true,
        'delete_others_blog' => true,
        'delete_private_blog' => true,
        'delete_published_blog' => true,
        'blog' => true,
        'read_private_blogs' => true,
        'edit_blogs' => true,
        'edit_others_blogs' => true,
        'edit_published_blogs' => true,
        'publish_blogs' => true,
        'delete_others_blogs' => true,
        'delete_private_blogs' => true,
        'delete_published_blogs' => true,
        'delete_blogs' => true,
        'delete_blog' => true,
    ),
)

1
Lưu ý rằng vai trò và khả năng được lưu liên tục . Nếu bạn có một số phiên bản trước đó không cho phép truy cập thì nó vẫn có thể là một phần của vai trò. Kết xuất dữ liệu liên tục và xem có tập hợp nào không nên.
Hết

Tôi đã thêm một bãi chứa các khả năng cơ sở dữ liệu. Tôi chỉ có 3 khả năng bài được đặt thành false mà tôi có trong đoạn mã trên.
Chris Morris

Tôi sẽ cài đặt plugin Trình biên tập vai trò người dùng - wordpress.org/plugins/user-role-editor . Sau đó, kiểm tra thủ công sự khác biệt giữa người dùng / vai trò - có thể có gì đó mâu thuẫn hoặc thiếu.
Thợ hàn

Xin chào @ChrisMorris, bạn đã làm thế nào với điều này? Bạn đã kết thúc việc tìm kiếm một giải pháp?
Tim Malone

Câu trả lời:


3

Thật khó để khắc phục sự cố mã ở trên vì đây chỉ là một phần của mã thực tế, nhưng đây là plugin tối thiểu cần thiết để đăng ký loại bài đăng tùy chỉnh (được gọi là Ví dụ) và vai trò tùy chỉnh (Trình quản lý Blog) có quyền truy cập vào loại bài đăng tùy chỉnh Ví dụ .

Điều này cũng có thể được sử dụng như một phần của tệp tin.php. Thay vào đó, chỉ cần sử dụng móc kích hoạt và hủy kích hoạt chủ đề.

<?php
/**
 * Plugin Name: WPSE 186337
 * Description: Debug WordPress StackExchange question 186337
 * Plugin URI: /wordpress/186337/
 * Author: Nathan Johnson
 * Licence: GPL2+
 * Licence URI: https://www.gnu.org/licenses/gpl-2.0.en.html
 */

//* Don't access this file directly
defined( 'ABSPATH' ) or die();

//* Add action to init to register custom post type
add_action( 'init', 'se186337_init' );

//* Register activation hook to add Blog Manager role
register_activation_hook( __FILE__ , 'se186337_activation' );

//* Register deactivation hook to remove Blog Manager role
register_deactivation_hook( __FILE__ , 'se186337_deactivation' );

function se186337_activation() {
  $caps = [
    //* Meta capabilities
    'read'                   => true,
    'edit_blog'              => true,
    'read_blog'              => true,
    'delete_blog'            => true,

    //* Primitive capabilities used outside of map_meta_cap()
    'edit_blogs'             => true,
    'edit_others_blogs'      => true,
    'publish_blogs'          => true,
    'read_private_blogs'     => true,

    //* Primitive capabilities used within of map_meta_cap()
    'delete_blogs'           => true,
    'delete_private_blogs'   => true,
    'delete_published_blogs' => true,
    'delete_others_blogs'    => true,
    'edit_private_blogs'     => true,
    'edit_published_blogs'   => true,
  ];

  add_role( 'blog_manager', 'Blog Manager', $caps );
}

function se186337_deactivation() {
  remove_role( 'blog_manager' );
}

function se186337_init() {
  $labels = [
    'name'          => __( 'Examples' ),
    'singular_name' => __( 'Example' ),
  ];
  $args = [
    'labels'          => $labels,
    'public'          => true,
    'has_archive'     => true,
    'capability_type' => 'blog',
    'map_meta_cap'    => true,
  ];
  register_post_type( 'examples', $args );
}

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.