Schimbă Slug-ul Autorului din Numele de Utilizator în Porecla

21 dec. 2010, 22:14:56
Vizualizări: 27.6K
Voturi: 16

Salut comunității,
este posibil să schimb slug-ul implicit al numelui de utilizator în poreclă dacă este disponibilă?

În mod implicit URL-ul arată așa: http://domain.tld/author/(admin),
este posibil să rescriu și să schimb în http://domain.tld/author/(porecla) astfel încât atunci când un utilizator își schimbă porecla din pagina de profil, slug-ul să se schimbe automat cu noul nume ales de utilizator?

mulțumesc mult!
Philip

1
Comentarii

Nu cred că poți face asta în mod realist, nu există un query_var care să găsească postări pe baza poreclei unui utilizator, prin urmare nici o variabilă adecvată de mapat pentru poreclă într-o regulă de rescriere. Ar trebui să adaugi propria ta gestionare a variabilelor de interogare pentru a trata cererile bazate pe porecle, alături de orice cod de rescriere (este posibil teoretic, dar nu cred că ar fi elegant în practică).

t31os t31os
22 dec. 2010 11:27:17
Toate răspunsurile la întrebare 3
6
18

Văd două modalități de a rezolva această problemă: modificarea datelor care formează URL-ul autorului sau schimbarea URL-ului autorului. Probabil ar trebui să gestionați și redirectările, astfel încât URL-urile vechi către arhivele utilizatorilor să continue să funcționeze atunci când un utilizator își schimbă pseudonimul.

Schimbarea URL-ului autorului

Această întrebare are două părți: gestionarea linkurilor primite cu pseudonimul autorului în loc de slug-ul autorului și generarea URL-urilor postărilor autorului cu pseudonimul în loc de slug-ul standard.

Prima parte este rezolvată prin conectarea la filtrul request, verificând dacă este o cerere de autor și căutând autorul după pseudonim în loc de slug. Dacă găsim un autor, modificăm parametrii interogării pentru a utiliza ID-ul autorului.

add_filter( 'request', 'wpse5742_request' );
function wpse5742_request( $query_vars )
{
    if ( array_key_exists( 'author_name', $query_vars ) ) {
        global $wpdb;
        $author_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='nickname' AND meta_value = %s", $query_vars['author_name'] ) );
        if ( $author_id ) {
            $query_vars['author'] = $author_id;
            unset( $query_vars['author_name'] );    
        }
    }
    return $query_vars;
}

A doua parte se realizează prin conectarea la filtrul author_link și înlocuirea părții standard a autorului (indicată de $author_nicename) cu pseudonimul.

add_filter( 'author_link', 'wpse5742_author_link', 10, 3 );
function wpse5742_author_link( $link, $author_id, $author_nicename )
{
    $author_nickname = get_user_meta( $author_id, 'nickname', true );
    if ( $author_nickname ) {
        $link = str_replace( $author_nicename, $author_nickname, $link );
    }
    return $link;
}

Modificarea datelor care formează URL-ul autorului

O modalitate poate mai ușoară ar fi actualizarea câmpului user_nicename din baza de date, care altfel nu este utilizat. Cred că acesta este generat din login-ul utilizatorului și nu este modificat ulterior. Dar nu sunt expert în managementul utilizatorilor, așa că folosiți-o pe propria răspundere.

add_action( 'user_profile_update_errors', 'wpse5742_set_user_nicename_to_nickname', 10, 3 );
function wpse5742_set_user_nicename_to_nickname( &$errors, $update, &$user )
{
    if ( ! empty( $user->nickname ) ) {
        $user->user_nicename = sanitize_title( $user->nickname, $user->display_name );
    }
}
7 ian. 2011 15:58:40
Comentarii

Soluție frumoasă. Încă nu am verificat-o, dar cred că abordarea ta este foarte bună.

Anh Tran Anh Tran
7 ian. 2011 17:34:36

Cum rămâne cu numele de utilizator (nicenames) duplicate? Trebuie să ne îngrijorăm în legătură cu asta sau WordPress se ocupă de această problemă?

Drew Baker Drew Baker
23 mai 2013 21:38:20

După cum a menționat @DrewBaker, ar putea apărea o problemă cu URL-uri duplicate dacă două profile de utilizator au nume similare. De exemplu, dacă un utilizator 1 își modifică numele în John și există un alt utilizator cu un nume similar, ambele profile vor avea același URL de autor: site.com/author/john.

Poți să-mi spui dacă există o soluție pentru această problemă?

Netizen Netizen
28 dec. 2013 10:14:30

De asemenea, dacă există un spațiu între nume, URL-ul nu va funcționa. Acest lucru se întâmplă cu numele de utilizator aleatorii create cu acest cod. Când am încercat codul pe calculatorul meu, acesta generează nume de utilizator aleatorii precum "New user 654937", iar URL-ul autorului arată astfel: site.com/author/Newuser654937/. Acest URL nu va funcționa până când nu schimbăm din nou numele profilului și eliminăm spațiile. Aveți vreo sugestie pentru a rezolva această problemă?

Netizen Netizen
28 dec. 2013 10:17:40

@IamSJ: Nu există nicio prevenție automată împotriva numelor duplicate sau a caracterelor invalide. Va trebui să vă asigurați singur de acest lucru. Probabil cel mai simplu este să faceți acest lucru prin a doua metodă, schimbând "nicename".

Jan Fabry Jan Fabry
29 dec. 2013 13:43:00

Pot să schimb slug-urile, dar toate paginile returnează eroare 404 chiar și după reîmprospătarea legăturilor permanente. A rezolvat cineva această problemă?

EHerman EHerman
17 ian. 2015 23:21:31
Arată celelalte 1 comentarii
0

Folosește acest plugin: http://wordpress.org/extend/plugins/display-name-author-permalink/

Deși nu este testat pentru versiunea 3.2.1. L-am folosit fără probleme.

Dacă primești o eroare de header la activarea pluginului, poți găsi o soluție aici: http://wordpresscloaker.com/blog/how-to-fix-wordpress-plugin-does-not-have-a-valid-header-error.html

20 nov. 2011 19:07:41
1
-3

o metodă ușoară este plugin-ul Author Slug

De asemenea, poți folosi un cod simplu:

add_action('init', 'set_new_author_base');
function set_new_author_base() {
    global $wp_rewrite;
    $author_slug = 'new_slug';
    $wp_rewrite->author_base = $author_slug;
}
22 dec. 2010 02:08:14
Comentarii

Din păcate, utilizatorul nu dorește să schimbe baza de autori.

t31os t31os
22 dec. 2010 11:24:00