Ubah Slug Penulis dari Nama Pengguna ke Nama Panggilan

13

Halo komunitas,
mungkinkah mengubah slug nama pengguna default menjadi nama panggilan jika tersedia?

Secara default url adalah sesuatu seperti: http: //domain.tld/author/ (admin ),
apakah mungkin untuk menulis ulang dan mengubah ke http: //domain.tld/author/ (nama panggilan ) jadi jika pengguna mengubah nama panggilannya dari halaman profil siput itu akan berubah juga menjadi nama baru yang diberikan oleh pengguna?

Terima kasih banyak!
Philip

Philip
sumber
Saya tidak berpikir Anda bisa secara realistis, tidak ada query_var yang akan menemukan posting berdasarkan nama panggilan pengguna, oleh karena itu tidak ada variabel yang sesuai untuk memetakan nama panggilan dalam aturan penulisan ulang. Anda harus menambahkan permintaan Anda sendiri penanganan var untuk menangani permintaan nama panggilan bersama kode penulisan ulang (itu mungkin secara teori, tetapi saya tidak berpikir itu akan menjadi elegan dalam praktiknya).
t31os

Jawaban:

16

Saya melihat dua cara untuk mengatasi masalah ini: mengubah data yang membentuk URL penulis, atau mengubah URL penulis. Anda mungkin harus menangani pengalihan juga, jadi URL lama ke arsip pengguna tetap berfungsi saat pengguna mengubah nama panggilan mereka.

Mengubah URL penulis

Ada dua bagian untuk pertanyaan ini: menangani tautan masuk dengan nama panggilan penulis, bukan penulis slug, dan menghasilkan url posting penulis dengan nama panggilan bukan standar slug.

Bagian pertama diselesaikan dengan menghubungkan ke requestfilter, memeriksa apakah itu permintaan penulis, dan mencari penulis dengan nama panggilan alih-alih siput. Jika kami menemukan penulis, kami mengubah parameter kueri untuk menggunakan ID penulis.

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

Bagian kedua dilakukan dengan menghubungkan ke author_linkfilter dan mengganti bagian penulis standar (ditunjukkan oleh $author_nicename) dengan nama panggilan.

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

Mengubah data yang membentuk URL penulis

Cara yang mungkin lebih mudah adalah dengan memperbarui bidang yang tidak digunakan user_nicenamedalam database. Saya pikir itu dihasilkan dari login pengguna dan tidak pernah berubah setelah itu. Tapi saya bukan ahli dalam manajemen pengguna, jadi gunakan dengan risiko Anda sendiri.

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 );
    }
}
Jan Fabry
sumber
Solusi yang bagus. Saya belum memeriksanya, tapi saya pikir pendekatan Anda sangat bagus.
Anh Tran
Bagaimana dengan nama samaran penulis duplikat? Apakah kita perlu khawatir tentang itu, atau apakah WP mengatasinya?
Drew Baker
Seperti yang dikatakan @DrewBaker, mungkin ada masalah dengan url ganda jika dua profil pengguna memiliki nama yang sama. Katakanlah jika pengguna 1 mengedit nama pengguna sebagai John dan ada pengguna lain dengan nama yang mirip, kedua profil pengguna memiliki url penulis tunggal sebagai site.com/author/john. Bisakah Anda memberi tahu saya jika ada perbaikan untuk ini?
Netizen
Juga jika ada spasi di antara nama, URL tidak akan berfungsi. Ini terjadi dengan nama pengguna acak yang dibuat dengan kode ini. Ketika saya mencoba kode pada akhirnya, itu menghasilkan nama pengguna acak seperti Pengguna baru 654937 dan URL penulis terlihat seperti site.com/author/Newuser654937/. URL itu tidak akan berfungsi sampai kami kembali mengubah nama profil dan menghapus spasi. Adakah yang bisa Anda sarankan solusinya?
Netizen
@IAMSJ: Tidak ada pencegahan otomatis terhadap nama duplikat, atau karakter yang tidak valid. Anda harus menyediakan ini sendiri. Mungkin yang termudah jika Anda melakukannya melalui cara kedua, mengubah "nama merek".
Jan Fabry
-3

cara mudah adalah plugin Author Slug

Anda juga dapat menggunakan kode kecil:

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;
}
bueltge
sumber
3
Sayangnya, ini bukan basis penulis yang ingin diubah oleh pengguna.
t31os