După perioda de început a unui blog cu un singur autor, vine vremea pentru guest-post, adică afișarea articolelor autorilor invitați. Nativ, unui articol i se poate asocia un autor ce are cont de utilizator în site.
Ce te faci dacă nu dorești ca autorilor invitați să le fie făcut un cont? Și nici nu vrei să instalezi al n-lea plugin care să permită adăugarea unui autor care nu este în listă. Și nici arhivă de autor nu ai nevoie. Și nici de comentarii din partea acestuia,
Problema se rezolvă astfel:
- crearea unei teme copil cu fișierul functions.php
- crearea unui câmp personalizat cu denumirea autor
- crearea unei funcții personalizate nume_autor
- adăugarea filtrelor pentru nume autor și funcția creată
Pas 1
Dacă nu ai deja o temă copil, crează una. Astfel nu vei pierde la actualizare funcția creată. Apoi crează un câmp personalizat, în engleză custom field.
Pas 2
Deschide orice articol și sub Editor ai Câmpuri personalizate. Aceste câmpuri identifică printr-un nume și o valoare. Dacă nu se văd aceste câmpuri înseamnă că sunt ascunse.
În colțul dreapta-sus ai Opțiuni ecran cu o mică săgeată. Dă click și din fereastra care se deschide în jos, bifează Câmpuri personalizate. Acum vei putea crea câmpul autor.
Dă click pe link-ul albastru Adaugă nou și scrie la nume autor, iar la valoare, de exemplu Ion Popescu. Apoi dă click pe butonul Adaugă câmp personalizat. Dacă te uiți la articol din zona publică o să vezi tot autorul vechi. Mai sunt 2 pași.
Dă click pe link-ul albastru Adaugă nou și scrie la nume autor, iar la valoare, de exemplu Ion Popescu. Apoi dă click pe butonul Adaugă câmp personalizat. Dacă te uiți la articol din zona publică o să vezi tot autorul vechi. Mai sunt 2 pași.
Pas 3
Deschide fișierul functions.php din tema copil și adaugă la sfârșit funcția:
function nume_autor( $name ) { //denumire functie si parametru
global $post; //variabila este globala, altfel nu o sa "vada" postul curent
$author = get_post_meta( $post->ID, 'autor', true ); //custom field autor din postul curent
if ( $author ) // daca acest camp este populat cu o valoare, ex:Ion Popescu
$name = $author; //suprascrie autorul cu noul nume
return $name; //returneaza valoarea campului personalizat
}
Pas 4
Numele autorului poate fi modificat și afișat cu ajutorul unui filtru astfel:
//adaugare nume autor fara a crea un utilizator add_filter( 'the_author', 'nume_autor' ); //functia the_author este aplicata afisarii autorului unui post de functia get_the_author add_filter( 'get_the_author_display_name', 'nume_autor' ); //afișare nume autor invitat
Acum poți suprascrie autorul oricărui articol cu cel din câmpul personalizat.
Atenție că autorul original nu este înlocuit, ci doar i se suprascrie numele. Deranjant este link-ul către pagina autorului, pe care credeam că o să-l scot astfel, dar se pare că n-am înțeles filtrul:
add_filter( 'author_link','__return_false');
În acest caz atributul href din tag-ul HTML a nu mai este populat. Pentru că autorul este înconjurat totuși de ancoră, este cam ciudat să dai click pe link și să te întorci pe aceeași pagină. Atunci înlocuiesc link-ul cu # și am rezolvat.
add_filter( 'author_link', 'modify_author_link', 10, 1 );
function modify_author_link( $link ) {
$link = '#';
return $link;
}
Acum am ancora în jurul autorului, dar nu se duce nicăieri. Am păstrat ancora pentru atributul rel=author, bun pentru SEO. Pe data viitoare.
