我想实现自定义作者网址。
目前作者的网址是这样的: 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
函数。
答案 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(); ?>
如果发布管理员或作者并希望在一个页面中显示他/她的所有帖子。因此,您需要自动获取他/她的网址。 然后尝试这个