web-dev-qa-db-fra.com

Capacité à éditer ses propres publications et pas d'autres

Quelle est la capacité qui permet aux utilisateurs de modifier leurs propres publications et non les autres? J'essaie de permettre aux auteurs de publication d'utiliser une fonction de plug-in uniquement pour les publications qu'ils possèdent.

L'autorisation d'accéder à l'option ne devrait concerner que les auteurs de la publication et même les éditeurs ne devraient pas y avoir accès. À côté des auteurs du message, seul l'administrateur doit avoir l'accès.

Le code du plugin a:

function init()
{
    // must be logged in
    if( is_user_logged_in() )
    {
        // actions
        add_action('admin_head', array($this,'admin_head'));
        add_action('admin_menu', array($this,'admin_menu'));


        add_action('wp_enqueue_scripts', array($this,'wp_enqueue_scripts'));
        add_action('wp_head', array($this,'wp_head'));
        add_action('wp_footer', array($this,'wp_footer'));
        add_action('wp_ajax_live_edit_update_width', array($this, 'ajax_update_width'));
    }
}

J'ai édité le fichier de plugin pour changer les possibilités (ligne 79).

    function init()
    {
        // must be logged in
if( is_user_logged_in() && current_user_can('author') || current_user_can('administrator'))
        {
            // actions
            add_action('admin_head', array($this,'admin_head'));
            add_action('admin_menu', array($this,'admin_menu'));


            add_action('wp_enqueue_scripts', array($this,'wp_enqueue_scripts'));
            add_action('wp_head', array($this,'wp_head'));
            add_action('wp_footer', array($this,'wp_footer'));
            add_action('wp_ajax_live_edit_update_width', array($this, 'ajax_update_width'));
        }
    }

Désormais, seuls les auteurs et les administrateurs du message y ont accès. Mais je veux remplacer current_user_can('author') par une fonctionnalité qui permet à l'auteur de modifier son propre message et pas celui des autres. Les fonctionnalités telles que edit_posts ou edit_published_posts donnent accès à tous les articles.

Quelqu'un pourrait-il me parler d'une fonctionnalité permettant aux utilisateurs de modifier leurs propres publications et non d'autres? Faites-moi également savoir si la méthode que j'ai utilisée est correcte. if( is_user_logged_in() && current_user_can('author') || current_user_can('administrator'))

Voici le code du plugin: http://Pastebin.com/m1E9QthM . Le lien vers le plugin original est - http://wordpress.org/support/plugin/live-edit

2
Netizen

Les capacités que vous essayez de limiter sont

  • delete_others_posts
  • edit_others_posts

En dehors des administrateurs et administrateurs superbes, le seul rôle disposant de cette autorisation est l'éditeur. Donc, supprimer ces fonctionnalités de l'éditeur devrait permettre de réaliser cela.

/**
 * Remove capabilities from editors.
 *
 * Call the function when your plugin/theme is activated.
 */
function wpcodex_set_capabilities() {

    // Get the role object.
    $editor = get_role( 'editor' );

    // A list of capabilities to remove from editors.
    $caps = array(
        'delete_others_posts',
        'edit_others_posts',
    );

    foreach ( $caps as $cap ) {

        // Remove the capability.
        $editor->remove_cap( $cap );
    }
}
add_action( 'init', 'wpcodex_set_capabilities' );

Vous ne devriez exécuter ce code que lors de l'activation d'un plugin ou d'un thème. De Codex

Remarque: Ce paramètre est enregistré dans la base de données (dans la table wp_options, champ 'wp_user_roles'). Vous devez donc l'exécuter une seule fois, lors de l'activation et/ou de la désactivation du thème/plug-in.

2
sakibmoon

Un auteur est une personne qui peut publier et gérer ses propres messages. Peut-être que jeter un coup d’œil ici dans le codex sous Rôles et capacités vous aidera, il vous indiquera tous les rôles que WordPress a et les différentes capacités.

Si vous souhaitez associer des fonctionnalités, vous devez peut-être créer un nouveau rôle avec add_role () .

1
RachieVee

Vous pouvez vérifier l'autorisation de modifier une publication spéciale avec la méta-fonctionnalité edit_post en transmettant l'ID de publication en tant que second argument de la fonction current_user_can():

current_user_can( 'edit_post', $post_ID )

Cela correspond à la capacité edit_posts si le champ post_author de cette publication correspond à l'ID de l'utilisateur actuel. Pour plus de détails sur son fonctionnement, voir le code de la fonction map_meta_cap() dans wp-includes/capabilities.php autour de la ligne 1073.

Edit: Pour ce qui est vu dans votre plugin, vous pouvez vérifier is_singular() et obtenir l’ID par get_the_ID() pour appliquer la fonctionnalité de votre plugin de manière conditionnelle. Mais le crochet init est trop tôt pour cela. Utilisez le crochet wp à la place. Avec cela, vous pouvez appliquer vos scripts pour des requêtes singulières (pages, publications,…) par exemple. N'oubliez pas de vérifier la méta casquette chaque fois que vous enregistrez une publication (par exemple, dans les rappels ajax).

1
David

Vous pouvez get_post() , vérifiez si le get_current_user_id est égal au post_author information, puis agissez en conséquence ...

if ('edit.php' === $GLOBALS['pagenow']) {
    if (
        current_user_can('administrator')
        || get_post(filter_input(INPUT_POST, 'post_id'))->post_author == get_current_user_id()
    ) {
        // Yes, you can
    } else {
        wp_redirect(admin_url());
        exit;
    }
}
1
tfrommen