バックエンドのカスタム投稿タイプへのカスタムロールアクセスの許可


8

だから私はこれでいくつかの問題を抱えています、そして私は理由がわかりません。バックエンドでブログにアクセスできるカスタムロールが必要です。

機能タイプがの新しい投稿タイプと、blog管理者アクセスユーザーがカスタム投稿タイプを追加/編集できるようにするすべての大文字の新しいユーザーロールを追加しました。これは管理者にとっては機能し、バックエンドで投稿タイプにアクセスできます。ただし、私のカスタムロールのユーザーは、まったくバックエンドに入ることができません。

ノートの投稿タイプ引数

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

役割を登録

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

キャップを追加

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

私はこの原因を突き止めようと必死にグーゲル化してきました。私は複数形、複数形以外の大文字で試して、投稿タイプの引数に機能を追加してみました。しかし、私はバックエンドに入ることができません。テーマに、ユーザーを管理者から追い出す可能性のある他のコードがありません(これをテストしているときにユーザーを追い出す自分のコードを削除しました)

編集 ここでは、データベースからblog_manager機能のダンプを見ることができます。そこにはかなりのテストBSが残っていますが、私が知っていることからログインできないわけではありません。

'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
役割と機能は永続的に保存されることに注意してください。以前のバージョンでアクセスを許可していなかった場合でも、役割の一部として存在する可能性があります。永続データをダンプして、不必要な設定があるかどうかを確認します。
Rarst、

データベース機能のダンプを追加しました。上記のコードの3つの投稿機能をfalseに設定しているだけです。
Chris Morris、

ユーザーロールエディタープラグイン-wordpress.org/plugins/user-role-editorをインストールします。次に、ユーザー/ロールの違いを手動で検査します。競合または不足しているものがある可能性があります。
ウェルチャー、2015年

こんにちは@ChrisMorris、これをどうやってやりましたか?最終的に解決策を見つけましたか?
Tim Malone

回答:


3

上記のコードは実際のコードの一部にすぎないため、トラブルシューティングが困難ですが、カスタムの投稿タイプ(例と呼ばれる)と、カスタムの投稿タイプの例にアクセスできるカスタムの役割(ブログマネージャー)を登録するために必要な最小限のプラグインを示します。

これは、テーマのfunctions.phpファイルの一部としても使用できます。代わりに、テーマのアクティブ化フックと非アクティブ化フックを使用してください。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.