Afișează link-ul de editare dacă autorul postării este utilizatorul curent

9 feb. 2013, 17:42:59
Vizualizări: 21.8K
Voturi: 4

Creez o pagină author.php și listez toate postările unui autor. Deși administratorii pot vedea link-urile de editare ale postărilor, vreau să afișez link-ul doar dacă utilizatorul autentificat este autorul curent

de exemplu

dacă testuser este autentificat și pagina curentă este /author/testuser poate vedea link-urile de editare ale postărilor

dar

dacă testuser este autentificat și pagina curentă este /author/theee nu poate vedea link-urile

momentan am

$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('editează', '', ''); 
} else {

}

dar tot doar administratorii pot vedea link-urile.

5
Comentarii

Scuze, dar utilizatorul "autentificat" va fi întotdeauna "utilizatorul curent". Asta este confuz. Codex-ul spune (evidențierea este a mea): "Afișează un link pentru editarea postării curente, dacă un utilizator este autentificat și are permisiunea de a edita postarea." Aceasta implică faptul că utilizatorii tăi nu pot edita postările în cauză sau că nu sunt autentificați. (Și dacă nu sunt autentificați, WordPress nu are cum să știe dacă pot edita postarea sau nu.)

s_ha_dum s_ha_dum
9 feb. 2013 17:47:15

Încerc să spun că atunci când un utilizator autentificat vizitează pagina de autor a altcuiva, nu ar trebui să vadă link-ul de editare, dar când vizitează propria pagină de autor, ar trebui să-l vadă.

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

oh... Nu aș fi dedus asta. Te rog editează întrebarea ta. Am o soluție pentru tine dacă nimeni nu mă întrece.

s_ha_dum s_ha_dum
9 feb. 2013 18:14:18

În modelul Roluri și Capabilități al WordPress, Editorii pot edita postările altor utilizatori, în timp ce Autorii pot edita doar propriile lor postări. Ai putea pur și simplu să faci utilizatorii în cauză Autori, și apoi să folosești edit_post_link()? Atunci totul funcționează așa cum te-ai aștepta, pentru toți utilizatorii, la orice nivel (Autor, Editor, Administrator, etc).

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

De fapt, mi-am dat seama de asta (după cum poți vedea în unul dintre comentariile mele de mai jos) și acum funcționează :) mulțumesc

Emre Caglar Emre Caglar
20 mar. 2013 13:38:50
Toate răspunsurile la întrebare 4
0

Dacă trebuie doar să modifici pagina author.php, acest fragment de cod va funcționa probabil:

<?php 

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

    edit_post_link('editează', '', '');

}

?>

Prima parte a condițiilor verifică dacă există un utilizator autentificat. A doua parte va fi adevărată dacă pagina curentă este pagina de autor a utilizatorului curent.

6 dec. 2013 14:34:44
0

Cred că linkul de editare al articolului ar trebui să fie vizibil pentru autorul articolului și moderator (utilizator editor sau cine are acea capabilitate)

Deci codul meu propus arată astfel

global $post;
$current_user = wp_get_current_user();

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

    //afișează linkul de editare    
}
27 feb. 2014 14:14:48
4

Plasat în functions.php al temei tale, acest cod ar trebui să modifice global comportamentul funcției edit_post_link. Ar trebui să funcționeze pe toate arhivele tale, nu doar pe arhivele de autor - orice folosește 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');

Va funcționa doar în mod fiabil în interiorul unui Loop, care este singurul loc unde ar trebui să folosești edit_post_link oricum.

Dacă dorești ca acest lucru să funcționeze doar pentru paginile de arhivă ale autorului, pur și simplu lipește acel cod înainte de Loop în șablonul author.php și nu-l pune în function.php. Nu ar trebui să afecteze decât acea pagină. Sau poți folosi doar conținutul funcției pentru a-ți crea condiționalul, cum încercai să faci.

9 feb. 2013 18:23:03
Comentarii

Am încercat să pun funcția în pagina de funcții, dar nu a funcționat corect. Când am pus același cod în fișierul author.php, deoarece este într-o buclă, pe al doilea câmp primesc eroarea Fatal error: Cannot redeclare limit_edit_Link_wpse_85214() (previously declared .. Cred că trebuie să modific puțin codul funcției, dar nu am reușit. Cum aș putea să o editez, domnule?

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 Am găsit acest lucru util, dar se pare că edit_post_link nu funcționează cu acest cod. Afișează textul dar nu și linkul. edit: ah ok. Utilizatorii trebuie să fie cel puțin autori. Greșeli stupide :) Mulțumesc

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

Nu poți redeclara o funcție. Acesta este un lucru de bază în PHP. Dacă ai copiat acest cod în două fișiere diferite, vei avea probleme. Acel cod va afișa link-ul "Edit" dacă utilizatorul curent este autorul postării, ceea ce înseamnă că doar autorul poate vedea link-ul în arhiva autorului, plus că funcționează și pe orice altă arhivă. Am testat asta când l-am scris și l-am testat din nou acum. În ce condiții nu funcționează acest lucru?

s_ha_dum s_ha_dum
16 feb. 2013 16:47:39

am folosit codul de pe http://wordpress.org/support/topic/comparing-the-post-author-id-and-logged-in-user-id. probabil că primul meu cod și chiar codul tău ar putea fi corect, pentru că problema mea era cu rolul utilizatorului (schimbat de la abonat la autor). în prezent încerc să le permit să își editeze postările pe partea de front-end, așa cum este explicat aici: http://wp.tutsplus.com/tutorials/creative-coding/posting-via-the-front-end-editing-and-deleting/, dar am câteva probleme...

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

Nu am reușit să fac soluția lui @Mat să funcționeze. Pare corectă, totuși.

WP stochează valoarea lui $post->post_author ca un șir de caractere. Totuși, get_the_author_meta( 'ID' ) și get_current_user_id() returnează fiecare un număr întreg, deci comparația strictă funcționează în a doua parte a instrucțiunii IF.

Dacă înlocuiți get_the_author_meta( 'ID' ) cu $post->post_author trebuie să folosiți == și nu === ca operator de comparație, deoarece valoarea lui $post->post_author este un șir de caractere iar get_current_user_id() returnează un număr întreg.

Test:

<?php echo 'Tipul ID-ului autorului: ' . gettype( get_the_author_meta( 'ID' ) ) . '<br>'; ?>
<?php echo 'Tipul ID-ului utilizatorului curent: ' . gettype( get_current_user_id() ); ?>
<?php 
    echo 'Utilizatorul autentificat este autorul? '; 
    if ( get_the_author_meta( 'ID' ) == get_current_user_id() ) {
         echo 'DA  <br>'; 
    } else {
        echo 'NU'; 
    }
?>

Soluție folosind operatorul de comparație strictă care funcționează pentru mine:

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

  //...

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