晚上好,
我觉得我一直在用一块砖墙撞我的头一段时间我现在求助于你。
我有一个Wordpress支持的网站,我在其上创建了一些使用URL参数的自定义页面模板,以使它们正常工作。
目前我的网页处理正常:mydomain.com/clubs/betting/?c=arsenal
我试图做的是让它看起来更漂亮,如下所示:mydomain.com/clubs/betting/arsenal /
我认为这将是一个10分钟的工作,但是一个半小时后,我仍然没有进一步。我的mod_rewrite看起来像这样:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^clubs/betting/([A-Za-z0-9-]+)/?$ clubs/betting/?c=$1 [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我哪里错了?
答案 0 :(得分:0)
你可以使用重写api来调用你的php文件,而不是创建一个页面模板。这将是最干净的方式。
add_action('init', 'anew_rewrite_rule');
function anew_rewrite_rule(){
//note matching betting/something
add_rewrite_rule('^betting\\/[a-z]','index.php?is_betting_page=1','top');
}
add_action('query_vars','controller_set_query_var');
function controller_set_query_var($vars) {
array_push($vars, 'is_betting_page'); // ref url redirected to in add rewrite rule
return $vars;
}
//we'll call it a template but point to your controller
add_filter('template_include', 'include_controller');
function include_controller($template){
// see above 2 functions..
if(get_query_var('is_betting_page')){
//path to your template file -- update this!
$new_template = get_stylesheet_directory().'/yourtemplatefile.php';
if(file_exists($new_template)){
$template = $new_template;
}
}
return $template;
}
注意:插入此代码后需要进入设置并保存永久链接,这会刷新重写规则。
这样wordpress就不会尝试使用自己的重写机制来解析网址...
您可以使用$ _SERVER变量获取uri。
当然,如果你在项目中足够早,你可以创建一个名为投注的自定义帖子类型并将其设置为基本网址,然后阿森纳将是一个自定义帖子类型等。然后你可以使用获得标题来运行任何你要。
答案 1 :(得分:0)
感谢大卫指出我正确的方向......我终于设法使用Wordpress Rewrite API解决了这个问题。
最后,我在functions.php文件中使用了以下代码:
function custom_rewrite_rule(){
//note matching betting/something
add_rewrite_rule('^clubs/betting/([^/]+)/?','index.php?page_id=160&club_name=$matches[1]','top');
add_rewrite_tag('%club_name%','([^/]*)');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
这允许我处理url重写并仍然将url参数传递给我的页面,以便我可以在其上显示正确的内容。
然后我可以使用以下方式访问页面模板中的参数:
$wp_query->query_vars['club_name'];
感谢您指出我正确的方向...我想我会发布我最终使用的代码以防其他人试图这样做。