Mostrar enlace de edición si el autor de la publicación es el usuario actual
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.
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.

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
}

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.

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?

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

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?

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..

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; ?>
