Mostrar enlace de edición si el autor de la publicación es el usuario actual

9 feb 2013, 17:42:59
Vistas: 21.8K
Votos: 4

Estoy creando una página author.php y listando todas las publicaciones de un autor. Aunque los administradores pueden ver los enlaces de edición de las publicaciones, quiero mostrar el enlace solo si el usuario conectado es el usuario actual

por ejemplo

si testuser está conectado y la página actual es /author/testuser puede ver los enlaces de edición de publicaciones

pero

si testuser está conectado y la página actual es /author/theee no puede ver los enlaces

actualmente tengo

// Obtener el autor actual
$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));
$th = $curauth->nickname; 
$cu = $current_user->user_login;
// Verificar si el autor actual es el mismo que el autor de la página
if ( $th = $curauth ) {
  edit_post_link('editar', '', ''); 
} else {

}

pero aún así solo los administradores pueden ver los enlaces.

5
Comentarios

Lo siento, pero el usuario "conectado" siempre será el "usuario actual". Eso es confuso. El Codex dice (énfasis mío): "Muestra un enlace para editar la entrada actual, si un usuario está conectado y tiene permiso para editar la entrada." Eso implica que tus usuarios no pueden editar las entradas en cuestión, o que no están conectados. (Y si no están conectados, WordPress no tiene forma de saber si pueden editar la entrada o no).

s_ha_dum s_ha_dum
9 feb 2013 17:47:15

Estoy tratando de decir que cuando un usuario conectado ve la página de autor de otra persona, no deberían ver el enlace de edición, pero cuando ven su propia página de autor, sí deberían.

Emre Caglar Emre Caglar
9 feb 2013 17:51:33

Oh... no lo habría deducido. Por favor edita tu pregunta. Tengo una solución para ti si nadie me gana de mano.

s_ha_dum s_ha_dum
9 feb 2013 18:14:18

En el modelo de Roles y Capacidades de WordPress, los Editores pueden editar las publicaciones de otros usuarios, mientras que los Autores solo pueden editar las suyas propias. ¿Podrías simplemente hacer que los usuarios en cuestión sean Autores y luego usar edit_post_link()? Entonces todo funciona como se espera, para todos los usuarios, en cualquier nivel (Autor, Editor, Administrador, etc.).

Pat J Pat J
20 mar 2013 01:26:15

De hecho me di cuenta de eso (como puedes ver en uno de mis comentarios abajo) y ahora funciona :) gracias

Emre Caglar Emre Caglar
20 mar 2013 13:38:50
Todas las respuestas a la pregunta 4
0

Si solo necesitas modificar la página author.php, este fragmento de código probablemente funcionará:

<?php 

if( is_user_logged_in() && is_author(get_current_user_id()) ) {

    edit_post_link('editar', '', '');

}

?>

La primera parte de las condiciones verifica si hay un usuario conectado. La segunda será verdadera si la página actual es la página de autor del usuario actual.

6 dic 2013 14:34:44
0

Creo que el enlace de edición de la publicación debería ser visible para el autor de la publicación y el moderador (usuario editor o quien tenga esa capacidad)

Así que mi código propuesto es el siguiente:

global $post;
$current_user = wp_get_current_user();

if(current_user_can( 'edit_others_posts', $post->ID ) && ($post->post_author == $current_user->ID))  { 

    //mostrar enlace de edición    
}
27 feb 2014 14:14:48
4

Colocado en el functions.php de tu tema, esto debería alterar globalmente el comportamiento de edit_post_link. Debería funcionar en todos tus archivos, no solo en los archivos de autor, cualquier cosa que use edit_post_link.

function limit_edit_Link_wpse_85214($link) {
  global $post,$current_user;
  get_currentuserinfo();
  if ($post->post_author == $current_user->ID) {
    return $link;
  }
  return false;
}
add_filter('get_edit_post_link','limit_edit_Link_wpse_85214');

Solo funcionará de manera confiable dentro de un Loop, que es el único lugar donde deberías estar usando edit_post_link de todos modos.

Si quieres que esto funcione solo para las páginas de archivo de autor, simplemente pega ese código antes del Loop en la plantilla author.php y no lo coloques en function.php. No debería afectar nada más que esa página. O puedes usar solo el contenido de la función para hacer tu condicional, como estabas intentando hacer.

9 feb 2013 18:23:03
Comentarios

Intenté colocar la función en la página de funciones pero no funcionó correctamente. Pero cuando puse el mismo código en la página author.php ya que está dentro de un bucle, en el segundo campo me aparece el error: Fatal error: Cannot redeclare limit_edit_Link_wpse_85214() (previously declared.. Creo que necesito editar ligeramente el código de esa función pero no pude hacerlo. ¿Cómo puedo editarlo señor?

Emre Caglar Emre Caglar
16 feb 2013 12:23:52

http://wordpress.org/support/topic/comparing-the-post-author-id-and-logged-in-user-id encontré esto útil pero parece que edit_post_link no funciona con este código. Muestra el texto pero no el enlace. edit: oh ok. Los usuarios deben ser al menos autores. Errores tontos :) gracias

Emre Caglar Emre Caglar
16 feb 2013 13:07:38

No puedes redeclarar una función. Eso es PHP básico. Si copiaste esto en dos archivos diferentes tendrás problemas. Ese código mostrará el enlace "Editar" si el usuario actual es el autor de la publicación, lo que significa que solo el autor puede ver el enlace en un archivo de autor, además funciona en cualquier otro archivo también. Probé eso cuando lo escribí, y lo probé nuevamente ahora. ¿Bajo qué condiciones no funciona esto?

s_ha_dum s_ha_dum
16 feb 2013 16:47:39

utilicé el código de http://wordpress.org/support/topic/comparing-the-post-author-id-and-logged-in-user-id. probablemente mi primer código y el tuyo podrían ser correctos porque mi problema era con el rol de usuario (cambiado de suscriptor a autor). actualmente estoy intentando permitirles editar sus publicaciones en el front-end como se explica aquí: http://wp.tutsplus.com/tutorials/creative-coding/posting-via-the-front-end-editing-and-deleting/ pero estoy teniendo algunos problemas..

Emre Caglar Emre Caglar
16 feb 2013 17:27:27
0

No pude hacer que funcionara la solución de @Mat. Parece correcta, sin embargo.

WordPress almacena el valor de $post->post_author como una cadena. Sin embargo, get_the_author_meta( 'ID' ) y get_current_user_id() devuelven un entero cada uno, por lo que la comparación estricta funciona en la segunda parte de la declaración IF.

Si reemplazas get_the_author_meta( 'ID' ) con $post->post_author debes usar == y no === como operador de comparación porque el valor de $post->post_author es una cadena y get_current_user_id() devuelve un entero.

Prueba:

<?php echo 'Tipo de ID del autor: ' . gettype( get_the_author_meta( 'ID' ) ) . '<br>'; ?>
<?php echo 'Tipo de ID de usuario actual: ' . gettype( get_current_user_id() ); ?>
<?php 
    echo '¿El usuario conectado es el autor? '; 
    if ( get_the_author_meta( 'ID' ) == get_current_user_id() ) {
         echo 'VERDADERO  <br>'; 
    } else {
        echo 'FALSO'; 
    }
?>

Solución usando operador de comparación estricta que funciona para mí:

<?php if ( is_user_logged_in() && get_the_author_meta( 'ID' ) === get_current_user_id() ) : ?> 

  //...

<?php endif; ?>  
16 jul 2019 19:09:17