web-dev-qa-db-ja.com

カスタム投稿タイプを作成すると、その投稿タイプを自動的に編集/削除する機能も作成されますか。

たとえば、 "destination"という投稿タイプを作成した場合、 "edit_destinations"や "delete_destinations"などの機能が自動的に作成されますか?

1
trusktr

WordPressに新しい機能が登録されていないという意味で、その機能が自動的に作成されることはありません。代わりに、投稿の作成/編集に割り当てられている機能をデフォルトで使用します。たとえば、作成者がログインした場合、デフォルトで新しい作成者エントリを作成して公開できます。

register_post_typeを使用するときは、これをcapabilities値でオーバーライドできます。 Justin Tadlockのすばらしいチュートリアルはこちら http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress

3
aaronwaggs

カスタム投稿タイプの中央変数を定義します:public $post_type_1 = 'archiv';

そしてこれを使って新しい機能を追加しましょう。

        $capabilities = array(
            'edit_post'          => 'edit_' . $this->post_type_1,
            'edit_posts'         => 'edit_' . $this->post_type_1 . 's',
            'edit_others_posts'  => 'edit_others_' . $this->post_type_1 . 's',
            'publish_posts'      => 'publish_' . $this->post_type_1 . 's',
            'read_post'          => 'read_' . $this->post_type_1,
            'read_private_posts' => 'read_private_' . $this->post_type_1 . 's',
            'delete_post'        => 'delete_' . $this->post_type_1
        );

また、プラグインをアクティブにしたときにのみ、この新しいCapabiltiesオブジェクトを別のデフォルトロールに追加します。

        foreach ( $this->todo_roles as $role ) {
            $wp_roles->add_cap( $role, 'edit_'          . $this->post_type_1 );
            $wp_roles->add_cap( $role, 'edit_'          . $this->post_type_1 . 's' );
            $wp_roles->add_cap( $role, 'edit_others_'   . $this->post_type_1 . 's' );
            $wp_roles->add_cap( $role, 'publish_'       . $this->post_type_1 . 's' );
            $wp_roles->add_cap( $role, 'read_'          . $this->post_type_1 );
            $wp_roles->add_cap( $role, 'read_private_'  . $this->post_type_1 . 's' );
            $wp_roles->add_cap( $role, 'delete_'        . $this->post_type_1 );
            $wp_roles->add_cap( $role, 'manage_'        . $this->taxonomy_type_1 );
        }

        foreach ( $this->read_roles as $role ) {
            $wp_roles->add_cap( $role, 'read_' . $this->post_type_1 );
            $wp_roles->add_cap( $role, 'read_' . $this->post_type_1 );
            $wp_roles->add_cap( $role, 'read_' . $this->post_type_1 );
        }

        global $wp_rewrite;
        $wp_rewrite->flush_rules();

ただし、プラグインをアンインストールする場合は、このオブジェクトの登録も解除する必要があります。

この要旨の例を見ることができます: https://Gist.github.com/978690

1
bueltge