我有三个问题。首先,我想这样做:
www.example.com/myblog => myblog.example.com
myblog是模板页面。然后,当从该页面打开一篇文章(文章是自定义的文章类型)时,url将如下所示
myblog.example.com/my-custom-post-type-post
第二个:
www.example.com/mycar => mycar.example.com
我的车也是模板页面,然后当从该页面打开帖子时(posta也是自定义的帖子类型,但这次帖子将在子类别中),url将如下所示
mycar.example.com/my-subcategory/my-car-custom-post-type
不知道如何在wp中执行此操作。
第三,有人能帮我弄清楚为什么这不起作用吗。我想重写此urlhttp://www.example.com/data-page/?data_id=123456789 到http://www.example.com/data-page/data_id/123456789
add\\u filter(\'query\\u vars\',\'add\\u my\\u var\');
function add_my_var($public_query_vars) {
$public_query_vars[] = \'data_id\';
return $public_query_vars;
}
function add_rewrite_rules($rules) {
$newrules[\'data-page/data_id/([0-9]{1,})/?$\'] = \'index.php?data_id=$matches[1]\';
$rules = $newrules + $rules;
return $rules;
}
function flushRules() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_filter(\'rewrite_rules_array\', \'add_rewrite_rules\');
add_filter(\'init\', \'flushRules\');
这是我将数据发送到另一个页面的方式。
<a href="<?= add_query_arg(array(\'data_id\'=>32),get_permalink(get_page_by_path(\'data-page\'))); ?>">Data page test link</a>
Thanx提前。
最合适的回答,由SO网友:Jan Fabry 整理而成
更改重写规则does not affect how WordPress writes links (除了标准链接,到帖子、档案等的链接,然后只在简单的情况下)。The rewrite rules only cover how incoming URLs are handled, you are responsible for writing the links in the new format. 这与具有更高级路由系统的框架(如Symfony)不同。
这意味着您应该更改写入的链接:
<a href="<?php echo \'/data-page/data_id/\' . 32; ?>">Data page test link</a>
(使用
get_page_by_path()
然后
get_permalink()
对我来说似乎多余,因为你已经知道permalink了,不是吗?你可以把它包起来
home_url()
以获取完整路径。)
然后,重写规则应如下所示:
$newrules[\'data-page/data_id/([0-9]{1,})/?$\'] = \'index.php?data_id=$matches[1]&pagename=data-page\';
我们添加
pagename=data-page
因为否则WordPress不知道显示什么页面。您当前有一个包含slug的页面
data-page
和自定义模板,但还有其他方法可以解决此问题。
此外,您不应该刷新每个init
. 只有当规则改变时才这样做。如果您将其作为插件编写,请使用激活挂钩,否则只需访问永久链接页面即可刷新它们。
你问题的第一部分我不太清楚。我曾经回答过how to let a single post have its own domain name, 也许这对你有帮助?