Author Nickname URL Friendly

时间:2013-05-11 作者:Noob Theory

使用以下代码更改作者页面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 );
  }
}

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您已经使用sanitize_title 一旦在你的代码。你需要在wpse5742_author_link 作用

$link = str_replace( $author_nicename, sanitize_title($author_nickname), $link );
那应该照顾好空间。另一种选择是使用urlencode 但是sanitize_title 保持事物的一致性。

我(最低限度地)用这个更改测试了您的代码,它似乎起到了作用。

结束

相关推荐

hide wp-content from urls

下面是我想从页面源中包含的文件的URL中隐藏wp内容的想法。在wp设置中定义以下内容。phpdefine (\'WP_CONTENT_URL\',\'http://example.com/myownfoldername\'); 并将此添加到.htaccessRewriteRule ^myownfoldername/(.*) /wp-content/$1 [QSA,L] 在localhost上没有其他插件的情况下,这似乎可以很好地工作,但在只有几个插件的在线站点上,它可以无缝地工作。我更