Wordpress自定义作者网址

时间:2013-05-04 21:27:06

标签: wordpress

我想实现自定义作者网址。

目前作者的网址是这样的: http://site.com/author/author-name/

我想做点什么 http://site.com/my-custom-url-here

对于每个用户。 我已尝试使用author_rewrite_rules过滤器,使用以下代码,这会正确转换网址,但是当我浏览网址时,这会给我一个页面未找到的消息

add_filter('author_link', 'no_author_base', 1000, 3);  
function no_author_base($link, $author_id) {  
    $link_base = trailingslashit(get_option('home'));  
    $link = preg_replace("|^{$link_base}author/|", '', $link);  
    return $link_base . $link;  
}  
add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');  
function no_author_base_rewrite_rules($author_rewrite) {    
    global $wpdb;  
    $author_rewrite = array();  
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");  
    foreach($authors as $author) {  
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';  
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';  
    }     
    return $author_rewrite;  
}  

非常感谢任何帮助!

感谢。 的更新

问题解决了!基本上我不知道调用flush_rewrite_rules函数。

2 个答案:

答案 0 :(得分:2)

解决!

以下是我的表现:

我不需要author_link过滤器所以我删除了它,我的自定义URL存储在usermeta表中,所以我获取它们并将它们传递到重写数组,最重要的是我不知道关于冲洗REWRITE CACHE并且原因是我的原始代码无法工作

下面是完整的代码:

add_filter('author_rewrite_rules', 'my_author_url_with_custom_url_rewrite_rules');
function my_author_url_with_custom_url_rewrite_rules($author_rewrite) {

  global $wpdb;
  $author_rewrite = array();
  $authors = $wpdb->get_results("SELECT ID, user_nicename AS nicename, meta_value as profile_name
                                    from $wpdb->users 
                                    LEFT JOIN wp_usermeta ON wp_usermeta.user_id = $wpdb->users.ID
                                    WHERE  meta_key = 'profile_name'");    

  foreach ($authors as $author) {
    $author_rewrite["{$author->profile_name}/page/?([0-9]+)/?$"] = 'index.php?author_name=' . $author->nicename . '&paged=$matches[1]';
    $author_rewrite["{$author->profile_name}/?$"] = "index.php?author_name={$author->nicename}";
  }
  return $author_rewrite;
}
flush_rewrite_rules(false);

完成重写规则后不要忘记评论flush_rewrite_rules来电,这非常昂贵!

答案 1 :(得分:0)

尝试这个。获取您的作者网址。

<?php the_author_posts_link(); ?>

如果发布管理员或作者并希望在一个页面中显示他/她的所有帖子。因此,您需要自动获取他/她的网址。 然后尝试这个