web-dev-qa-db-fra.com

Lorsque vous créez un type de publication personnalisé, cela crée-t-il également des fonctionnalités permettant de modifier/supprimer automatiquement ce type de publication?

Par exemple, si je crée un type de publication appelé "destinations", est-ce que cela crée automatiquement des fonctionnalités telles que "edit_destinations" ou "delete_destinations"?

1
trusktr

Il ne crée pas automatiquement cette fonctionnalité dans le sens où aucune nouvelle fonctionnalité n'a été enregistrée avec WordPress. À la place, il utilise par défaut les fonctionnalités attribuées à la création/édition de publications. Par exemple, si un auteur se connecte, il pourra créer et publier une nouvelle entrée de destination par défaut.

Vous pouvez remplacer ceci par la valeur capabilities lorsque vous utilisez register_post_type. Voir l'excellent tutoriel de Justin Tadlock ici http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress

3
aaronwaggs

Je définis une variable centrale pour le type de publication personnalisé: public $post_type_1 = 'archiv';

et l'utiliser pour ajouter de nouvelles capacités:

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

J'ajoute aussi ces nouveaux objets aux rôles par défaut, uniquement lors de l'activation du plugin:

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

Mais, vous devez également désenregistrer ces objets, si le plugin doit être désinstallé.

Vous pouvez voir un exemple sur cette Gist: https://Gist.github.com/978690

1
bueltge