user_has_cap filtro permite editar pero no permitirá guardar

2

Problema

Estoy trabajando en un sitio web en el que debemos poder poner un nombre de usuario en el campo personalizado de un tipo de publicación personalizada y permitir que el usuario especificado realice cambios en esa publicación y solo en esa publicación. Pensé que user_has_cap sería el gancho de filtro que se usaría, pero extrañamente no parece permitir que un usuario actualice la publicación.

El usuario puede ver la pantalla de edición de la publicación y solo la publicación que implica que mi filtro funciona correctamente, pero al hacer clic en actualizar aparece el error You are not allowed to edit posts as this user. que contradice esto.

El tipo de publicación tiene capability_type => post , así que siento que no debería ser el problema.

Código

function event_cap_filter($all, $cap, $args) {
    // if not requesting edit post then return caps
    if('edit_post' != $args[0]) return $all;
    // if user can already edit others posts then return caps
    if($all['edit_others_posts']) return $all;

    // if user is the post author then return caps
    $post = get_post($args[2]);
    if($args[1] == $post->post_author) return $all;

    // query to find user in custom field
    // and therefore if they are allowed to edit this post

    if($can_edit) {
        foreach($cap as $c) {
            $all[$c] = true;
        }
    }

    return $all;
}
add_filter('user_has_cap', 'event_cap_filter', 10, 3);

Pregunta

Si mi usuario puede editar la publicación donde está especificado en el campo personalizado que compruebo, ¿por qué no puede guardar sus cambios? ¿Estoy pasando por alto algo?

    
pregunta txa 17.02.2014 - 21:50

2 respuestas

2

He estado luchando con el mismo problema ... cuando args [0] está publicado, args [2] no está poblado. Tienes que obtenerlo de la url.

if(substr($args[0],0,7)=="publish"){
    $postid=$_GET["post"];
    if(!isset($postid))return $allcaps;
}
else $postid=$args[2];
    
respondido por el Nancy 26.10.2014 - 15:02
2

Creo que estás encontrando un error en _wp_translate_postdata() que hace que marque edit_others_posts sin proporcionar ningún contexto para map_meta_cap y otros filtros para usar en situaciones como la tuya (donde quieres que un usuario pueda editar contenido específico). publicaciones que no son de ellos):

enlace

En concreto, tiene el efecto de que el usuario afectado podrá iniciar sesión en el editor de publicaciones (lo que implica que funcionó), pero los intentos de guardar los cambios fallarán por completo (lo que suena como tu problema).

El boleto incluye una solución de Daniel Bachuber que otros pueden convertir para sus propios fines.

Esperemos que el error se solucione pronto.

    
respondido por el jerclarke 04.05.2015 - 22:37

Lea otras preguntas en las etiquetas