重写作者链接后找不到WordPress 404

时间:2017-01-18 作者:吉 宁

我想将默认的WordPress作者链接(即/author/user\\u nicename)更改为/author/user\\u id。

我发现这很容易做到,我通过两种方式做到了这一点:

1、我只是复制get_author_posts_url() 功能来自wp-includes/author-template.php 并在我的主题中重写:

function ji_get_user_url($author_id, $author_nicename = \'\') {
global $wp_rewrite;
$auth_ID = (int) $author_id;
$link = $wp_rewrite->get_author_permastruct();
if ( empty($link) ) {
    $file = home_url( \'/\' );
    $link = $file . \'?author=\' . $auth_ID;
}else {
    if ( \'\' == $author_nicename ) {
        $user = get_userdata($author_id);
        if ( !empty($user->user_nicename) )
            $author_nicename = $author_id;
    }
    $link = str_replace(\'%author%\', $author_id, $link);
    $link = home_url( user_trailingslashit( $link ) );
}
$link = apply_filters( \'author_link\', $link, $author_id, $author_nicename );
return $link;
}
2。我使用了过滤器:

function chang_author_link($link,$author_id,$author_nicename){
$user_info = get_userdata(get_current_user_id());
$user_id= $user_info->ID;
$link = str_replace($author_nicename, $user_id, $link);
return $link;
}
add_filter(\'author_link\', \'chang_author_link\',10,3);
以上任何一种方法都可以成功地将默认作者链接更改为/author/user\\u id,但它们都返回了404未找到页面!

发生了什么事?

2 个回复
最合适的回答,由SO网友:吉 宁 整理而成

我只是自己解决了这个难题。

事实是,用作者id替换作者slug,很难直接改变作者链接。正如@cjbj所说:

您已经移动了一个指示您前往白金汉宫的标志,并期望通过这样做,您也可以重新定位白金汉宫。

我们需要以其他方式处理这个问题。

默认情况下,wordpress使用/user\\u nicename/作为slug,对吗?所以,让我们保持原样,但要更改user\\u nicename的“内容”。换句话说,我们将user\\u id设置为user\\u nicename。

因此,当有新用户加入时,只需做一件事:

wp_update_user(array(\'user_nicename\' => $user_id))
全部完成!

SO网友:cjbj

功能get_author_posts_url 检索要在其中找到特定作者的帖子的url。如果更改url,并不意味着帖子会被移动。

换言之,您已经移动了一个指示您前往白金汉宫的标志,并期望通过这样做,您也可以重新定位白金汉宫。事实上,正如你所发现的,你最终会在一个无处可去的地方。

还要注意,因为您正在修改现有过滤器author_link, 该修改也将适用于源自其他函数的调用。如果要将过滤器应用于自定义函数,最好也定义一个自定义命名过滤器。

相关推荐

Get_Author_Posts_url()不起作用

全部在单个中。php文件位于Genesis子主题中。我有一个echo 属于divs 在这两者之间,我在anchors 我正在尝试通过variable, 像这样:function my_function() { $author = get_the_author_meta( $post->post_author ); $author_link = get_author_posts_url($author); $author_avatar = ge