Wordpress简单重写规则不起作用
我试图在Wordpress中创建一个重写规则来创建指向搜索结果的直接链接 我正在使用一个名为“object”的自定义帖子类型 我的结果页面位于以下url: 我想创建这种URL来指向新对象的列表: 重写的查询必须是: 然后,我将能够使用$\u GET['filter']值来查询我的对象(meta\u query) 我的问题 我已尝试使用以下代码来解决此问题:Wordpress简单重写规则不起作用,wordpress,Wordpress,我试图在Wordpress中创建一个重写规则来创建指向搜索结果的直接链接 我正在使用一个名为“object”的自定义帖子类型 我的结果页面位于以下url: 我想创建这种URL来指向新对象的列表: 重写的查询必须是: 然后,我将能够使用$\u GET['filter']值来查询我的对象(meta\u query) 我的问题 我已尝试使用以下代码来解决此问题: add_rewrite_tag('%filter%','([^&]+)'); add_rewrite_rule('objects/n
add_rewrite_tag('%filter%','([^&]+)');
add_rewrite_rule('objects/new/','objects/?filter=new','top');
.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
有人能告诉我为什么Wordpress试图检索附件吗?
我的重写规则有问题吗?还是我遗漏了什么
提前感谢您的帮助 需要将重写规则放置为
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^objects/new(.*)$ /objects/?filter=new [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
重新启动发动机
重写基/
重写规则^objects/new(.*)$/objects/?filter=new[L]
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
需要将重写规则放置为
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^objects/new(.*)$ /objects/?filter=new [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
重新启动发动机
重写基/
重写规则^objects/new(.*)$/objects/?filter=new[L]
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
使用此插件,当您点击url时,它将帮助您分析哪个规则起作用。您可以创建新的重写规则,并可以在此处检查它们是否起作用
无需在wordpress中编写任何内容,因为wordpress本身有一个wp_rewrite类来管理所有重写规则
尝试使用几个重写规则,并相应地设置规则优先级。因为列表中上面提到或列出的规则将首先匹配,如果在上面找到匹配项,wordpress将忽略下面列出的规则
我已经用这个插件和它的工作方式为我想。在这里附加截图
使用此插件,当您点击url时,它将帮助您分析哪个规则起作用。您可以创建新的重写规则,并可以在此处检查它们是否起作用
无需在wordpress中编写任何内容,因为wordpress本身有一个wp_rewrite类来管理所有重写规则
尝试使用几个重写规则,并相应地设置规则优先级。因为列表中上面提到或列出的规则将首先匹配,如果在上面找到匹配项,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;
}
其中27是我想用重写的URL访问的“/objects”页面的Wordpress ID,并且:
function custom_wp_querystring() {
add_rewrite_tag('%filtre%','([^&]+)');
}
为了告诉Wordpress,我需要使用一个名为“filtre”的自定义查询变量
最后一个函数必须在初始化操作中添加:
add_action( 'init', 'custom_wp_querystring');
add_filter( 'generate_rewrite_rules', 'custom_rewrite' );
重要的是要知道,在我的页面模板(在我的示例中是ID为27的模板)中,如果我想测试查询变量,就不可能进行这种测试:
if ( isset ( $_GET['filtre'] ) ) { ... }
GET变量由于Wordpress重定向而“隐藏”,您必须执行以下操作:
if ( isset( $wp_query->query_vars['filtre'] ) ) { ... }
嗯,
我终于找到了实现这一目标的方法
以下是我添加到主题中的代码:
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;
}
其中27是我想用重写的URL访问的“/objects”页面的Wordpress ID,并且:
function custom_wp_querystring() {
add_rewrite_tag('%filtre%','([^&]+)');
}
为了告诉Wordpress,我需要使用一个名为“filtre”的自定义查询变量
最后一个函数必须在初始化操作中添加:
add_action( 'init', 'custom_wp_querystring');
add_filter( 'generate_rewrite_rules', 'custom_rewrite' );
重要的是要知道,在我的页面模板(在我的示例中是ID为27的模板)中,如果我想测试查询变量,就不可能进行这种测试:
if ( isset ( $_GET['filtre'] ) ) { ... }
GET变量由于Wordpress重定向而“隐藏”,您必须执行以下操作:
if ( isset( $wp_query->query_vars['filtre'] ) ) { ... }
几个问题1。这工作正常吗-2。-这对你是否合适?嗨,普拉莫德,我不明白你问这些问题是什么意思?domain.com/objects是一个现有的WP页面,domain.com/objects/filter/new对我来说不是一个好的解决方案,因为我不想在最终url中使用“filter”(我想要domain.com/objects/new)几个问题1。这工作正常吗-2。-这对你是否合适?嗨,普拉莫德,我不明白你问这些问题是什么意思?domain.com/objects是一个现有的WP页面,domain.com/objects/filter/new对我来说不是一个好的解决方案,因为我不想在最终url中使用“filter”(我想要domain.com/objects/new)Hi,即使这个规则高于wordpress常规规则,wordpress也会查询“attachement”Hi,即使这个规则高于wordpress常规规则,Wordpress正在查询“附件”嗨,谢谢!这个插件看起来不错,但我从未发现如何删除添加的规则:(我使用Debug Bar查看分析查询。不幸的是,我的问题不是这个,我知道如何添加重写规则,我只是不知道如何正确地构造规则来实现我想要的:SHi,谢谢!这个插件看起来不错,但我从未发现如何删除添加的规则:(我使用Debug Bar查看分析查询。不幸的是,我的问题不是这个,我知道如何添加重写规则,我只是不知道如何正确地构造规则以实现我的目标:SYou正在通过编码添加规则,而插件直接在db上添加代码……)谢谢,使用
index.php?pagename=some page name
规则时没有运气,使用index.php?page_id=123
一切正常。您正在通过编码添加规则,而插件直接在db上添加代码:)谢谢,我们使用index.php?pagename=some page name
规则时运气不佳,使用index.php?page_id=123
一切正常。