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?
Emre Caglar
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
Emre Caglar
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?
s_ha_dum
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..
Emre Caglar
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; ?>