Afișează link-ul de editare dacă autorul postării este utilizatorul curent
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.

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.

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
}

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.

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?

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

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?

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

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