Mostrare il link di modifica se l'autore del post è l'utente corrente
Sto creando una pagina author.php e sto elencando tutti i post di un autore. Anche se gli amministratori possono vedere i link di modifica dei post, voglio mostrare il link solo se l'utente loggato è l'utente corrente
per esempio
se testuser è loggato e la pagina corrente è /author/testuser può vedere i link di modifica dei post
ma
se testuser è loggato e la pagina corrente è /author/theee non può vedere i link
attualmente ho
$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));
$th = $curauth->nickname;
$cu = $current_user->user_login;
if ( $th = $curauth ) {
edit_post_link('modifica', '', '');
} else {
}
ma ancora solo gli amministratori possono vedere i link.
Se devi solo modificare la pagina author.php, questo frammento di codice probabilmente funzionerà:
<?php
if( is_user_logged_in() && is_author(get_current_user_id()) ) {
edit_post_link('modifica', '', '');
}
?>
La prima parte delle condizioni verifica se c'è un utente loggato. La seconda sarà vera se la pagina corrente è la pagina autore dell'utente attuale.

Penso che il link per modificare il post dovrebbe essere visibile all'autore del post e al moderatore (utente editor o chiunque abbia questa capacità)
Quindi il mio codice proposto è questo
global $post;
$current_user = wp_get_current_user();
if(current_user_can( 'edit_others_posts', $post->ID ) && ($post->post_author == $current_user->ID)) {
//mostra il link di modifica
}

Inserito nel file functions.php
del tuo tema, questo codice dovrebbe modificare globalmente il comportamento di edit_post_link
. Funzionerà su tutti i tuoi archivi, non solo sugli archivi degli autori - tutto ciò che utilizza 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');
Funzionerà in modo affidabile solo all'interno di un Loop, che è l'unico posto in cui dovresti utilizzare comunque edit_post_link
.
Se vuoi che questo funzioni solo per le pagine degli archivi degli autori, incolla semplicemente il codice prima del Loop nel template author.php
e non inserirlo in function.php
. In questo modo non influenzerà nulla tranne quella pagina. Oppure puoi utilizzare il contenuto della funzione per creare il tuo condizionale, come stavi cercando di fare.

Ho provato a inserire la funzione nella pagina function.php ma non funzionava correttamente. Quando ho inserito lo stesso codice nella pagina author.php, essendo in un loop, sul secondo campo ho ricevuto l'errore: Fatal error: Cannot redeclare limit_edit_Link_wpse_85214() (previously declared .. Penso di dover modificare leggermente il codice della funzione ma non ci sono riuscito. Come posso modificarlo, signore?

http://wordpress.org/support/topic/comparing-the-post-author-id-and-logged-in-user-id Ho trovato questo utile ma sembra che edit_post_link non funzioni con questo codice. Visualizza il testo ma non il link. edit: oh ok. Gli utenti devono essere almeno autori. Errori stupidi :) grazie

Non puoi ridefinire una funzione. Questo è PHP di base. Se hai copiato questo codice in due file diversi avrai problemi. Quel codice mostra il link "Modifica" se l'utente corrente è l'autore del post, il che significa che solo l'autore può vedere il link nell'archivio autore, e funziona anche su qualsiasi altro archivio. L'ho testato quando l'ho scritto e l'ho testato di nuovo ora. In quali condizioni non funziona?

ho utilizzato il codice da http://wordpress.org/support/topic/comparing-the-post-author-id-and-logged-in-user-id. probabilmente il mio primo codice e il tuo potrebbero essere anche corretti perché il mio problema riguardava il ruolo utente (cambiato da subscriber ad author). attualmente sto cercando di permettere loro di modificare i loro post in front end come spiegato qui: http://wp.tutsplus.com/tutorials/creative-coding/posting-via-the-front-end-editing-and-deleting/ ma sto avendo alcuni problemi..

Non sono riuscito a far funzionare la soluzione di @Mat. Sembra corretta, tuttavia.
WordPress memorizza il valore di $post->post_author come stringa. Tuttavia, get_the_author_meta( 'ID' )
e get_current_user_id()
restituiscono ciascuno un intero, quindi il confronto stretto funziona nella seconda parte dell'istruzione IF.
Se sostituisci get_the_author_meta( 'ID' )
con $post->post_author
devi usare ==
e non ===
come operatore di confronto perché il valore di $post->post_author è una stringa e get_current_user_id()
restituisce un intero.
Test:
<?php echo 'Tipo ID autore: ' . gettype( get_the_author_meta( 'ID' ) ) . '<br>'; ?>
<?php echo 'Tipo ID utente corrente: ' . gettype( get_current_user_id() ); ?>
<?php
echo 'L\'utente loggato è l\'autore? ';
if ( get_the_author_meta( 'ID' ) == get_current_user_id() ) {
echo 'VERO <br>';
} else {
echo 'FALSO';
}
?>
Soluzione che utilizza l'operatore di confronto stretto e funziona per me:
<?php if ( is_user_logged_in() && get_the_author_meta( 'ID' ) === get_current_user_id() ) : ?>
//...
<?php endif; ?>
