Thay đổi Slug tác giả từ tên người dùng thành biệt danh


13

Xin chào cộng đồng,
có thể thay đổi tên người dùng mặc định thành tên hiệu nếu có sẵn không?

Theo mặc định, url là một cái gì đó như: http: //domain.tld/author/ (admin ),
có thể viết lại và thay đổi thành http: //domain.tld/author/ (biệt danh ) vì vậy nếu người dùng thay đổi tên hiệu của anh ấy từ trang hồ sơ, con sên nó cũng sẽ đổi thành tên mới do người dùng cung cấp?

cảm ơn rất nhiều!
Philip


Tôi không nghĩ bạn thực tế có thể, không có query_var nào sẽ tìm thấy các bài đăng dựa trên biệt danh của người dùng, do đó không có biến thích hợp để ánh xạ tên hiệu theo quy tắc viết lại. Bạn sẽ phải thêm xử lý var truy vấn của riêng mình để xử lý các truy vấn biệt hiệu bên cạnh bất kỳ mã viết lại nào (về lý thuyết là có thể, nhưng tôi không nghĩ rằng nó sẽ thanh lịch trong thực tế).
t31os

Câu trả lời:


16

Tôi thấy có hai cách để giải quyết vấn đề này: thay đổi dữ liệu hình thành URL tác giả hoặc thay đổi URL tác giả. Có lẽ bạn cũng nên xử lý các chuyển hướng, vì vậy các URL cũ để lưu trữ người dùng tiếp tục hoạt động khi người dùng thay đổi tên hiệu của họ.

Thay đổi URL tác giả

Có hai phần cho câu hỏi này: xử lý các liên kết đến với biệt danh tác giả thay vì sên tác giả và tạo các url bài viết của tác giả với biệt danh thay vì sên tiêu chuẩn.

Phần đầu tiên được giải quyết bằng cách móc vào requestbộ lọc, kiểm tra xem đó có phải là yêu cầu của tác giả hay không và tìm kiếm tác giả bằng biệt danh thay vì sên. Nếu chúng tôi tìm thấy một tác giả, chúng tôi thay đổi các tham số truy vấn để sử dụng ID tác giả.

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

Phần thứ hai được thực hiện bằng cách móc vào author_linkbộ lọc và thay thế phần tác giả tiêu chuẩn (được chỉ định bởi $author_nicename) bằng tên hiệu.

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

Thay đổi dữ liệu hình thành URL tác giả

Một cách có thể dễ dàng hơn là cập nhật trường không được sử dụng user_nicenametrong cơ sở dữ liệu. Tôi nghĩ rằng nó được tạo ra từ đăng nhập người dùng và không bao giờ thay đổi sau đó. Nhưng tôi không phải là một chuyên gia về quản lý người dùng, vì vậy hãy tự chịu rủi ro khi sử dụng nó.

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

Giải pháp tốt đẹp. Tôi chưa kiểm tra nó, nhưng tôi nghĩ cách tiếp cận của bạn thực sự tốt.
Anh Trần

Điều gì về nicenames tác giả? Chúng ta có cần phải lo lắng về điều đó không, hay WP có quan tâm đến nó không?
Drew Baker

Như @DrewBaker đã nói, có thể có vấn đề với các url trùng lặp nếu hai hồ sơ người dùng có tên giống nhau. Giả sử nếu người dùng 1 chỉnh sửa tên người dùng của mình là John và có một người dùng khác có tên tương tự, cả hai hồ sơ người dùng đều có url tác giả duy nhất là site.com/author/john. Bạn có thể cho tôi biết nếu có một sửa chữa cho điều này?
Netizen

Ngoài ra, nếu có một khoảng trắng ở giữa tên, URL sẽ không hoạt động. Nó xảy ra với tên người dùng ngẫu nhiên được tạo bằng mã này. Khi tôi thử mã cuối cùng, nó sẽ tạo ra các tên người dùng ngẫu nhiên như Người dùng mới 654937 và URL tác giả trông giống như trang web.com/author/Newuser654937/. URL đó sẽ không hoạt động cho đến khi chúng tôi lại thay đổi tên hồ sơ và xóa khoảng trắng. Có thể đề nghị một giải pháp với nó?
Netizen

@IamSJ: Không có tự động ngăn chặn tên trùng lặp hoặc ký tự không hợp lệ. Bạn sẽ phải tự cung cấp cái này. Có lẽ là dễ nhất nếu bạn làm điều đó thông qua cách thứ hai, thay đổi "nicename".
Jan Fabry


-3

một cách dễ dàng là plugin Author Slug

Ngoài ra, bạn có thể sử dụng mã nhỏ:

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
Đây không phải là cơ sở tác giả mà người dùng đang tìm cách thay đổi một cách đáng tiếc.
t31os
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.