使用以下代码更改作者页面url以使用“昵称”。工作正常,但当昵称是多个单词时,它不会使其url友好。有什么办法吗?
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;
}
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;
}
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 );
}
}
最合适的回答,由SO网友:s_ha_dum 整理而成
您已经使用sanitize_title
一旦在你的代码。你需要在wpse5742_author_link
作用
$link = str_replace( $author_nicename, sanitize_title($author_nickname), $link );
那应该照顾好空间。另一种选择是使用
urlencode
但是
sanitize_title
保持事物的一致性。
我(最低限度地)用这个更改测试了您的代码,它似乎起到了作用。