我正在尝试在 Wordpress 中创建重写规则,以创建指向搜索结果的直接漂亮链接。
我正在使用名为“对象”的自定义帖子类型
我的结果页面位于此网址: http: //www.domain.com/objects/
我想创建这种 URL 来指向新对象的列表: http: //www.domain.com/objects/new
重写的查询必须是:http://www.domain.com/objects/?filter =new
然后我将能够使用 $_GET['filter'] 值来查询我的对象(meta_query)...
我的问题
我尝试用这段代码来做到这一点:
add_rewrite_tag('%filter%','([^&]+)');
add_rewrite_rule('objects/new/','objects/?filter=new','top');
Run Code Online (Sandbox Code Playgroud)
.htaccess 看起来像这样:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^objects/new/ /objects/?filter=new [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试访问 URL http://www.domain.com/objects/new时,出现 404 错误:(
调试栏向我显示:
Request:
objects/new
Query String:
attachment=new
Matched Rewrite Rule:
[^/]+/([^/]+)/?$
Matched Rewrite Query:
attachment=new
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么 WordPress 尝试检索附件吗?我的重写规则有问题还是我遗漏了什么?
在此先感谢您的帮助!
好的,我终于找到了实现这一目标的方法。
这是我添加到主题中的代码:
function custom_rewrite( $wp_rewrite ) {
$feed_rules = array(
'objects/(.+)' => 'index.php?page_id=27&filtre=' . $wp_rewrite->preg_index(1),
);
$wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}
Run Code Online (Sandbox Code Playgroud)
其中 27 是我想要通过重写的 URL 访问的“/objects”页面的 WordPress ID,并且:
function custom_wp_querystring() {
add_rewrite_tag('%filtre%','([^&]+)');
}
Run Code Online (Sandbox Code Playgroud)
为了告诉 WordPress,我需要使用一个名为“filterre”的自定义查询变量。
最后一个函数必须添加到 init 操作中:
add_action( 'init', 'custom_wp_querystring');
add_filter( 'generate_rewrite_rules', 'custom_rewrite' );
Run Code Online (Sandbox Code Playgroud)
需要了解的重要一点是,在我的页面模板(示例中 ID 为 27 的页面模板)中,如果我想测试查询 var,则不可能进行此类测试:
if ( isset ( $_GET['filtre'] ) ) { ... }
Run Code Online (Sandbox Code Playgroud)
由于 Wordpress 重定向,GET 变量被“隐藏”,您必须执行以下操作:
if ( isset( $wp_query->query_vars['filtre'] ) ) { ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17771 次 |
| 最近记录: |