Capacidad para editar publicaciones propias y no otras

2

¿Cuál es la capacidad que permite a los usuarios editar sus propias publicaciones y no otras? Estoy tratando de permitir que los autores de las publicaciones utilicen una función de complemento solo en las publicaciones que poseen.

El permiso para acceder a la opción debe ser solo para los autores de esa publicación en particular e incluso los editores no deben tener acceso. Junto a los autores de la publicación, solo el administrador debe tener acceso.

El código del complemento tiene:

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

He editado el archivo del complemento para cambiar las capacidades (línea 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'));
        }
    }

Ahora, solo los autores y administradores de la publicación tienen acceso a ella. Pero quiero reemplazar current_user_can('author') a una capacidad que permite al autor editar su propia publicación y no otras. Las capacidades como edit_posts o edit_published_posts dan acceso a todas las publicaciones.

¿Podría alguien decirme sobre una capacidad que permita a los usuarios editar sus propias publicaciones y no otras? También déjame saber si la forma en que usé es correcta. if( is_user_logged_in() && current_user_can('author') || current_user_can('administrator'))

Aquí está el código del complemento: enlace . El enlace al complemento original es- enlace

    
pregunta Netizen 11.12.2013 - 13:34

4 respuestas

2

Las capacidades que intentas restringir son

  • delete_others_posts
  • edit_others_posts

Además de Super administrador y administrador, el único rol que tiene estos permisos es el editor. Por lo tanto, eliminar estas capacidades del Editor debería lograr esto.

/**
 * 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' );

Solo debes ejecutar este código durante la activación de un complemento o tema. De Codex

  

Nota: Esta configuración se guarda en la base de datos (en la tabla wp_options, campo 'wp_user_roles'), por lo que debe ejecutarse solo una vez, en la activación y / o desactivación del tema / complemento.

    
respondido por el sakibmoon 15.11.2015 - 19:12
1

Un autor es alguien que puede publicar y administrar sus propios mensajes. Tal vez le ayude echar un vistazo a aquí en el códice en Funciones y capacidades , le informa de todas las funciones que tiene WordPress y las diferentes capacidades.

Si va a mezclar y combinar capacidades, entonces quizás lo que necesita hacer es crear un nuevo rol con add_role () .

    
respondido por el RachieVee 11.12.2013 - 16:09
1

Puede verificar el permiso para editar una publicación especial con la meta capacidad edit_post al pasar la ID de la publicación como el segundo argumento para la función current_user_can() :

current_user_can( 'edit_post', $post_ID )

Esto evalúa la capacidad edit_posts si el campo post_author de esta publicación coincide con el ID de los usuarios actuales. Para obtener más detalles sobre cómo funciona, vea el código de la función map_meta_cap() en wp-includes/capabilities.php alrededor de la línea 1073.

Editar: Para lo que se ve en su complemento, puede verificar is_singular() y obtener la ID mediante get_the_ID() para aplicar su funcionalidad de forma condicional. Pero el init hook es demasiado pronto para eso. Utilice el gancho wp en su lugar. Con esto puedes aplicar tus scrips para consultas singulares (páginas, publicaciones, ...) por ejemplo. No olvide revisar el meta cap cada vez que guarde una publicación (por ejemplo, en devoluciones de llamada ajax).

    
respondido por el David 11.12.2013 - 16:56
1

Puede get_post() , verifique si get_current_user_id es igual a la información de post_author información y luego actúa sobre que ...

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;
    }
}
    
respondido por el tfrommen 11.12.2013 - 17:14

Lea otras preguntas en las etiquetas