Mostrare il link di modifica se l'autore del post è l'utente corrente

9 feb 2013, 17:42:59
Visualizzazioni: 21.8K
Voti: 4

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.

5
Commenti

Scusa, ma l'utente "loggato" sarà sempre l'"utente corrente". Questo è confuso. Il Codex recita (enfasi mia): "Mostra un link per modificare il post corrente, se un utente è loggato e autorizzato a modificare il post." Ciò implica che i tuoi utenti non possono modificare i post in questione, o che non sono loggati. (E se non sono loggati WordPress non ha modo di sapere se possono modificare il post o no.)

s_ha_dum s_ha_dum
9 feb 2013 17:47:15

Sto cercando di dire che quando un utente loggato visualizza la pagina autore di un'altra persona non dovrebbe vedere il link di modifica, ma quando visualizza la propria pagina autore dovrebbe vederlo.

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

oh... Non ci sarei mai arrivato. Per favore modifica la tua domanda. Ho una soluzione per te se nessuno mi batte sul tempo.

s_ha_dum s_ha_dum
9 feb 2013 18:14:18

Nel modello di Ruoli e Capacità di WordPress, gli Editor possono modificare i post di altri utenti, mentre gli Autori possono modificare solo i propri. Potresti semplicemente rendere gli utenti in questione Autori e poi usare edit_post_link()? In questo modo tutto funzionerebbe come previsto, per tutti gli utenti, a qualsiasi livello (Autore, Editor, Amministratore, ecc.).

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

In realtà me ne sono reso conto (come puoi vedere in uno dei miei commenti qui sotto) e ora funziona :) grazie

Emre Caglar Emre Caglar
20 mar 2013 13:38:50
Tutte le risposte alla domanda 4
0

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.

6 dic 2013 14:34:44
0

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    
}
27 feb 2014 14:14:48
4

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.

9 feb 2013 18:23:03
Commenti

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 Emre Caglar
16 feb 2013 12:23:52

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 Emre Caglar
16 feb 2013 13:07:38

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 s_ha_dum
16 feb 2013 16:47:39

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 Emre Caglar
16 feb 2013 17:27:27
0

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; ?>  
16 lug 2019 19:09:17