如何为好友新闻资料页面创建新的重写规则
How to create a new rewrite rule for an buddy press profile page
我有一个现有的好友新闻用户资料 link:例如https://example.com/members/joseph-bada
我需要制作 https://example.com/members/joseph-b 它的精确副本。
这是我的代码简化版:
add_filter('wp', 'custom_rewrite_rule');
function custom_rewrite_rule() {
global $wp_query, $wp_rewrite;
$slug = $wp_query->query_vars['name'];
if($slug==='joseph-bada') {
add_rewrite_rule('^members/joseph-b/?', 'members/joseph-bada', 'top');
$wp_rewrite->flush_rules();
}
}
但是如果我浏览 https://example.com/members/joseph-b - 我收到 404 错误
更新:
即使在 functions.php
中添加了这个
add_action('init', 'custom_test');
function custom_test() {
global $wp_rewrite;
add_rewrite_rule('^members/joseph-b', 'members/joseph-bada', 'top');
$wp_rewrite->flush_rules();
}
https://example.com/members/joseph-b还是404
有人可以指出我遗漏了什么吗?
更新:我了解到 https://example.com/index.php?bbp_user=joseph-bada&edit=1
导致 https://example.com/members/joseph-bada
所以现在我尝试了这个:
add_action('init', 'custom_test');
function custom_test() {
global $wp_rewrite;
add_rewrite_rule('^members/joseph-b', 'https://example.com/index.php?bbp_user=joseph-bada&edit=1', 'top');
$wp_rewrite->flush_rules();
}
虽然404还是没用..
免责声明:我不是 WP 开发人员,但请注意。
看起来 add_rewrite_rule 的 $query 部分需要在其设置中明确显示(如以下带有 index.php 字符串的示例所示)。
function custom_rewrite_rule() {
add_rewrite_rule('^nutrition/?([^/]*)/?','index.php?page_id=12&food=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
我还注意到你在做 add_filter 而不是 add_action。
我放弃了使用 add_rewrite_rule wordpress 功能。相反,我研究了 buddypress 插件及其工作原理。我发现了以下过滤器:
function custom_bp_domain_filter($domain, $user_id) {
$change_slug = is_joseph_bada_user_id($user_id);
if ($change_slug) {
$domain = trailingslashit(bp_get_root_domain() . '/' . 'members/joseph-b');
}
return $domain;
}
add_filter('bp_core_get_user_domain', 'custom_bp_domain_filter', 10, 2);
上面这部分是一个过滤器,我将检查显示的用户 ID 是否属于 members/joseph-bada。如果是,将其更改为 members/joseph-b
function custom_bp_after_slug_filter($after_member_slug) {
if ($after_member_slug==='joseph-b') {
$after_member_slug = 'joseph-bada';
}
return $after_member_slug;
}
add_filter('bp_core_set_uri_globals_member_slug', 'custom_bp_after_slug_filter');
以上部分确定 URI 现在是否为 members/joseph-b..我们没有用户使用它,而是 'joseph-bada'
这里的returned值是要显示的用户所以我们需要return 'joseph-bada'如果param值为'joseph-b'
当 members/joseph-b 被浏览..它会显示 members/joseph-bada
的个人资料
我有一个现有的好友新闻用户资料 link:例如https://example.com/members/joseph-bada
我需要制作 https://example.com/members/joseph-b 它的精确副本。
这是我的代码简化版:
add_filter('wp', 'custom_rewrite_rule');
function custom_rewrite_rule() {
global $wp_query, $wp_rewrite;
$slug = $wp_query->query_vars['name'];
if($slug==='joseph-bada') {
add_rewrite_rule('^members/joseph-b/?', 'members/joseph-bada', 'top');
$wp_rewrite->flush_rules();
}
}
但是如果我浏览 https://example.com/members/joseph-b - 我收到 404 错误
更新: 即使在 functions.php
中添加了这个add_action('init', 'custom_test');
function custom_test() {
global $wp_rewrite;
add_rewrite_rule('^members/joseph-b', 'members/joseph-bada', 'top');
$wp_rewrite->flush_rules();
}
https://example.com/members/joseph-b还是404
有人可以指出我遗漏了什么吗?
更新:我了解到 https://example.com/index.php?bbp_user=joseph-bada&edit=1 导致 https://example.com/members/joseph-bada
所以现在我尝试了这个:
add_action('init', 'custom_test');
function custom_test() {
global $wp_rewrite;
add_rewrite_rule('^members/joseph-b', 'https://example.com/index.php?bbp_user=joseph-bada&edit=1', 'top');
$wp_rewrite->flush_rules();
}
虽然404还是没用..
免责声明:我不是 WP 开发人员,但请注意。
看起来 add_rewrite_rule 的 $query 部分需要在其设置中明确显示(如以下带有 index.php 字符串的示例所示)。
function custom_rewrite_rule() {
add_rewrite_rule('^nutrition/?([^/]*)/?','index.php?page_id=12&food=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
我还注意到你在做 add_filter 而不是 add_action。
我放弃了使用 add_rewrite_rule wordpress 功能。相反,我研究了 buddypress 插件及其工作原理。我发现了以下过滤器:
function custom_bp_domain_filter($domain, $user_id) {
$change_slug = is_joseph_bada_user_id($user_id);
if ($change_slug) {
$domain = trailingslashit(bp_get_root_domain() . '/' . 'members/joseph-b');
}
return $domain;
}
add_filter('bp_core_get_user_domain', 'custom_bp_domain_filter', 10, 2);
上面这部分是一个过滤器,我将检查显示的用户 ID 是否属于 members/joseph-bada。如果是,将其更改为 members/joseph-b
function custom_bp_after_slug_filter($after_member_slug) {
if ($after_member_slug==='joseph-b') {
$after_member_slug = 'joseph-bada';
}
return $after_member_slug;
}
add_filter('bp_core_set_uri_globals_member_slug', 'custom_bp_after_slug_filter');
以上部分确定 URI 现在是否为 members/joseph-b..我们没有用户使用它,而是 'joseph-bada'
这里的returned值是要显示的用户所以我们需要return 'joseph-bada'如果param值为'joseph-b'
当 members/joseph-b 被浏览..它会显示 members/joseph-bada
的个人资料