我正在使用自定义页面模板,该模板旨在使用wpdb类和数据库中的一些外部表创建动态内容。 我试图保持网址结构尽可能干净,因此我正在使用'帖子名称'固定链接中的选项..
我只是全力以赴,所以不会让人感到困惑。
问题在于mod_rewrite - 因为我在wp的永久链接中使用了post_name选项 - wordpress本身正试图访问一个名为' 347'的实际页面。在动态'的父级下,而不是渲染动态模板,并使用347作为参数,通过“爆炸”来实现#39;爆炸' url并将最后一个值检索为动态参数,如下所示 -
$str = "$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$dynamic_para = explode("/", $str, 4); // in this case - 347
//... retrieve dynamic_para from db and stuff with it.
如何专门为此页面绕过wp的当前mod_rewrite?它甚至可能吗?我试图避免使用url发送GET变量,例如www.domain.com/dynamic/?para=347
答案 0 :(得分:1)
在WP中你应该用querystring重写为index.php(用户仍然在浏览器地址栏中看到" / dynamic / xxx")想要将/ dynamic / xxx重写为/ dynamic?para = xxx
你究竟放置了tc_query_vars_filter和tc_rewrite_rules($ rules)函数
您可以将它们放在(子)主题的functions.php中,或者更好地将它们添加到您自己的简单插件中,这样它们就可以用于任何主题:
e.g。创建,上传和激活:
<?php
/*
Plugin Name: Theme independent functions
Description: NOT TESTED
*/
// allow WP to store querystring attribs for use in our pages
function your_query_vars_filter($vars) {
$vars[] = 'para';
return $vars;
}
add_filter( 'query_vars', 'your_query_vars_filter' );
// "rewrite" /dynamic/xxx to index.php?pagename=dynamic¶=xxx
function your_rewrite_rules($rules) {
global $wp_rewrite;
$your_rule = array( // (not tested)
'dynamic/(.+)/?' => 'index.php?pagename=dynamic¶=$matches[1]'
);
return array_merge($your_rule, $rules);
}
add_filter('page_rewrite_rules', 'your_rewrite_rules');
// any other site customisation stuff you want to add to this plugin
?>
N.B。上面的过滤器是针对Pages;对于POSTS使用post_rewrite_rules过滤器
然后在您的自定义页面模板中:
$my_search_var = get_query_var('para'); // sanitize as reqd
Wordpress&#34;缓存&#34;它的重写规则所以最后我们需要刷新它们,以便你的新的能够得到认可:
通常的建议是,只需点击&#34;保存更改&#34;管理仪表板上的按钮固定链接页面(设置 - &gt;固定链接)但是,(由于我网站上的怪癖或最新版本的WP的更改?)上次我这样做,我实际上必须编辑永久链接,保存更改然后将其更改回应该更改,并再次保存以应用我的重写函数规则。