如果类别与程序代码匹配,我需要URL中的第一个子目录重写为查询的URL,即:4个大写字符,如AUBU
例如,我需要:
http://www.georgiancollege.ca/devprograms/AUBU/
重写为:
http://www.georgiancollege.ca/devprograms/index.php?page_id=16&major=AUBU
但我不希望它影响当前的网址,例如
http://www.georgiancollege.ca/devprograms/a-to-z/
不应该重写为:
http://www.georgiancollege.ca/devprograms/index.php?page_id=16&major=a-to-z
到目前为止,我所拥有的内容根本不起作用。 (基于:http://thereforei.am/2011/10/28/advanced-taxonomy-queries-with-pretty-urls/)
function eg_add_rewrite_rules() {
global $wp_rewrite;
$new_rules = array(
'(.+)/?$' => 'index.php?page_id=16&major=' . $wp_rewrite->preg_index(1)
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action( 'generate_rewrite_rules', 'eg_add_rewrite_rules' );
更新:上面的代码现在重定向到正确的页面,但在那个页面上我无法读取查询字符串,可能是因为URL重写查询字符串不在最后一页...
所以使用,
$program = $_GET['major'];
不返回主要代码...
答案 0 :(得分:1)
看起来像Apache网址重写的黑客攻击。我会用Mod_Rewrite来解决这个问题。 至于你的代码,你匹配的是一个不够具体的正则表达式。你只想匹配4个大写字母?也许试试这个:
'devprograms/([A-Z]{4})/?$' => 'index.php?page_id=16&major=' . $wp_rewrite->preg_index(1)
答案 1 :(得分:0)
感谢您的投入。
我不得不使用“解决方案”解决方案,因为它似乎并不想工作。
我尝试使用$ wp_query-> query_vars来获取查询字符串数据而不是$ _GET或$ _POST,如下所示:
if(isset($wp_query->query_vars['major'])) {
$program = urldecode($wp_query->query_vars['major']);
}
正如在http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/上所建议的那样,但是'major'的query_var保持不存在,即使存在来自相同URL重写的页面名称查询变量。
所以我继续......
以下是新的网址重写:
function add_rewrite_rules($aRules) {
$aNewRules = array('([A-Z]{4})/outline/?$' => 'index.php?pagename=programs&major=$matches[1]');
$aNewRules2 = array('([A-Z]{4})/?$' => 'index.php?pagename=programs&major=$matches[1]');
$aRules = $aNewRules + $aNewRules2 + $aRules;
return $aRules;
}
add_filter('rewrite_rules_array', 'add_rewrite_rules');
由于我的URL重写仍然只是以更漂亮的方式保存URL中的程序代码,我只是抓住REQUEST_URI并解析程序代码,如下所示:
$parts = explode('/',$_SERVER['REQUEST_URI']);
if (isset($_GET['major'])) {
$program = $_GET['major'];
} elseif ($parts[1] == 'devprograms') {
$program = $parts[2];
} else {
$program = get_the_title();
}
这解释了链接样式/ devprograms / BUSN和/ devprograms / program?major = BUSN
唯一的缺点就是我不能在安装时使用4个字母的名称,例如'test'或'page',因为它们将被重写到程序页面,并以'test'或'page'作为程序代码,这不是实际的程序。这是一个在命名页面时很容易解决的问题。
谢谢, 托马斯