Yazar Slug'unu Kullanıcı Adından Takma Ad olarak değiştirin


13

Topluluğa merhaba
, varsa varsayılan kullanıcı adı slug'unu takma adla değiştirmek mümkün mü?

Varsayılan olarak url şu şekildedir : http: //alanadi.tld/author/ (admin ), bir kullanıcı takma adını
değiştirirse, http: //alanadi.tld/author/ (takma ad ) olarak yeniden yazılabilir ve değiştirilebilir. profil sayfasından slug da kullanıcı tarafından verilen yeni isimle değişecek mi?

çok teşekkürler!
Philip


Gerçekçi bir şekilde yapabileceğinizi düşünmüyorum, kullanıcının takma adına dayalı yayınlar bulabilecek hiçbir sorgu_var, bu nedenle takma adı yeniden yazma kuralında eşlemek için uygun bir değişken yok. Herhangi bir yeniden yazma kodunun yanında takma ad sorguları ile başa çıkmak için kendi sorgu var işleme eklemek gerekir (teoride mümkündür, ama pratikte zarif olacağını sanmıyorum).
t31os

Yanıtlar:


17

Bu sorunu çözmek için iki yol görüyorum: yazar URL'sini oluşturan verileri değiştirme veya yazar URL'sini değiştirme. Muhtemelen yönlendirmeleri de ele almalısınız, bu nedenle kullanıcı takma adlarındaki eski URL'ler bir kullanıcı takma adını değiştirdiğinde çalışmaya devam eder.

Yazar URL'sini değiştirme

Bu sorunun iki bölümü vardır: gelen bağlantıları yazar slug yerine yazar takma adıyla ele alın ve standart slug yerine takma adla yazar posta URL'leri oluşturun.

İlk bölüm, requestfiltreye bağlanmak, yazarın isteği olup olmadığını kontrol etmek ve yazara slug yerine takma adla bakmak suretiyle çözülür . Bir yazar bulursak, yazar kimliğini kullanmak için sorgu parametrelerini değiştiririz.

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

İkinci bölüm author_linkfiltreye asılarak ve standart yazar kısmının (ile belirtilir $author_nicename) takma adla değiştirilmesiyle yapılır.

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

Yazar URL'sini oluşturan verileri değiştirme

user_nicenameVeritabanındaki aksi takdirde kullanılmayan alanı güncellemenin daha kolay bir yolu olabilir . Kullanıcı girişinden oluşturulduğunu ve bundan sonra hiç değişmediğini düşünüyorum. Ama ben kullanıcı yönetimi konusunda uzman değilim, bu yüzden kendi sorumluluğunuzdadır.

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 );
    }
}

Güzel çözüm. Henüz kontrol etmedim ama bence yaklaşımınız çok iyi.
Anh Tran

Yinelenen yazar niş adları ne olacak? Bunun için endişelenmemize gerek var mı yoksa WP bununla ilgileniyor mu?
Drew Baker

@DrewBaker'ın dediği gibi, iki kullanıcı profilinin benzer adlara sahip olması durumunda yinelenen URL'lerle ilgili bir sorun olabilir. Bir kullanıcı 1, kullanıcı adını John olarak düzenlediyse ve benzer ada sahip başka bir kullanıcı varsa, her iki kullanıcı profilinin site.com/author/john olarak tek yazarlı URL'si olduğunu varsayalım. Bunun için bir düzeltme olup olmadığını söyleyebilir misiniz?
Netizen

Ayrıca ad arasında boşluk varsa, URL çalışmaz. Bu kodla oluşturulan rasgele kullanıcı adlarıyla olur. Sonunda kodu denediğimde, Yeni kullanıcı 654937 gibi rastgele kullanıcı adları oluşturur ve yazar URL'si site.com/author/Newuser654937/ gibi görünür. Profil adını değiştirip boşlukları kaldırana kadar bu URL çalışmaz. Bununla bir çözüm önerebilir misiniz?
Netizen

@IamSJ: Yinelenen adlara veya geçersiz karakterlere karşı otomatik bir önleme yoktur. Bunu kendiniz sağlamanız gerekecek. Muhtemelen en kolay ikinci yolla yaparsanız, "nicename" değiştirerek.
Jan Fabry


-3

kolay bir yol eklentisidir Yazar Slug

Ayrıca küçük kod kullanabilirsiniz:

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

3
Kullanıcının maalesef değiştirmek istediği yazar tabanı değil.
t31os
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.