我是WP编程新手,在其他环境中,我遇到了一个简单的问题。
我使用普通的WP管理UI创建了一个页面(cdl手册)。然后,我在主题函数中添加了一些函数。php文件,以便我可以对页面内容使用短代码。这些函数在URL上查找查询参数(jp\\u stn),并使用该信息从数据库表中选择内容。在这种情况下,参数值是美国州的名称。提供的内容是一个关注该状态的页面。
所有这些都在我的开发网站上运行。
http://blog.jobspetroleum.net/cdl-training/ 列出每个州的CDL手册链接。如上所述,这些链接的形式如下。
http://blog.jobspetroleum.net/cdl-manual/?jp_stn=arizona
现在,我想将特定于状态的查询参数URL转换为用户友好的URL。这是新的模式。
http://blog.jobspetroleum.net/cdl-manual/arizona/
对我来说,显而易见的解决办法是添加一条重写规则。经过多次摸索,我找到了一个插件,可以让我将自定义重写规则直接添加到。htaccess文件。插件是“WP-htaccess-Control”,它工作得很好。然而,我的重写规则并没有发挥应有的作用。以下是结果。添加重写规则后的htaccess文件。
# BEGIN WordPress
# WPhtc: Begin Custom htaccess
RewriteRule ^cdl-manual/([-a-z]+)/$ /cdl-manual/?jp_stn=$1 [L]
# WPhtc: End Custom htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
新规则位于自定义htaccess部分。当我用/cdl-manual/arizona/测试它时,它会产生404错误。为了调试,我尝试将标志从[L]更改为[R,L]。
导致重定向到http://blog.jobspetroleum.net/cdl-manual/?jp_stn=arizona. 页面正确加载了内容,但未重写URL。我的结论是,这条规则是正确的。但是如果没有R标志,我想重写就不能正常工作。根据http://htaccess.madewithlove.be/ 重写的URL正是我想要的。
有人知道这里出了什么问题吗?我的方法完全不可行吗?有什么更好的方法来解决这个问题?谢谢
编辑2014年10月1日-如果对任何人都有帮助,“CDL手册”页面中只有“[bigleaf\\u jobspet\\u cdlmanualbystate]”内容。此函数和其他依赖项位于函数中。我的孩子主题中的php文件。这个特定函数在GET中查找jp\\u stn query参数,读取状态名称,然后从我添加到数据库的表中提取详细内容。然后返回指定状态的HTML。
编辑2014年10月2日-深入WP Codex,我找到了索引的pagename查询变量的引用。php。然后我尝试了一些变化,并提出了这个几乎有效的规则。
RewriteRule ^cdl-manual/([-a-z]+)/$ ?pagename=cdl-manual&jp_stn=$1 [L]
此规则确实加载cdl手动页面,但忽略状态参数值。奇怪的是,如果我在浏览器中键入预期的重写模式,它会加载指定状态所需的页面。
http://blog.jobspetroleum.net/?pagename=cdl-manual&jp_stn=arizona
SO网友:Milo
而不是向添加规则。htaccess,您可以使用WordPress重写来执行此操作:
function cdl_rewrite_rule(){
add_rewrite_rule(
\'cdl-manual/([-a-z]+)/?$\',
\'index.php?pagename=cdl-manual&jp_stn=$matches[1]\',
\'top\'
);
}
add_action( \'init\', \'cdl_rewrite_rule\' );
这是假设您已经添加
jp_stn
到有效查询变量列表:
function cdl_query_vars( $query_vars {
$query_vars[] = \'jp_stn\';
return $query_vars;
}
add_filter( \'query_vars\', \'cdl_query_vars\' );
刷新重写以使规则生效,您可以通过访问永久链接设置页面来执行此操作。