Wordpress自定义模块重写-不工作

Wordpress自定义模块重写-不工作,wordpress,apache,.htaccess,mod-rewrite,Wordpress,Apache,.htaccess,Mod Rewrite,晚上好 我觉得我已经用这个把头撞在砖墙上有一段时间了,现在我向你求助 我有一个Wordpress支持的网站,我在上面创建了一些自定义页面模板,这些模板使用URL参数使它们工作 目前,我的网页可以很好地使用URL:mydomain.com/clubs/betting/?c=arsenal 我想做的是让它看起来更漂亮,所以它看起来像:mydomain.com/clubs/betting/arsenal/ 我原以为这将是一个10分钟的工作,但1个半小时后,我仍然没有进一步。我的mod_重写如下所示:

晚上好

我觉得我已经用这个把头撞在砖墙上有一段时间了,现在我向你求助

我有一个Wordpress支持的网站,我在上面创建了一些自定义页面模板,这些模板使用URL参数使它们工作

目前,我的网页可以很好地使用URL:mydomain.com/clubs/betting/?c=arsenal

我想做的是让它看起来更漂亮,所以它看起来像:mydomain.com/clubs/betting/arsenal/

我原以为这将是一个10分钟的工作,但1个半小时后,我仍然没有进一步。我的mod_重写如下所示:

  # 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
#开始WordPress
重新启动发动机
重写基/
重写规则^clubs/BOTTING/([A-Za-z0-9-])/?$clubs/BOTTING/?c=$1[NC,L]
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress

哪里出错了???

您可以使用重写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就不会尝试使用自己的重写机制解析url

您可以使用$\u服务器变量获取uri


当然,如果你在项目中做得足够早,你可以创建一个名为Botting的自定义帖子类型,并将其设置为基本url,然后阿森纳将是一个自定义帖子类型,等等。然后你可以使用get title运行任何你想要的内容

感谢大卫为我的演讲指出了正确的方向。。。我终于用Wordpress重写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'];

谢谢你给我指出了正确的方向。。。我想我会发布我最终使用的代码,以防其他人尝试这样做。

WordPress在实际的PHP代码中做了大量的重写工作。修改htaccess文件将无法获得所需的结果。有什么方法可以获得所需的结果吗?可能是通过PHP?谢谢,我回家后会做一个测试我想我大部分都明白了。。。唯一让人困惑的是“是投注页面”部分。。引用是什么?简单的解释its a查询变量是_betting_page=1将在内部uri中传递(可见uri将保持不变,如果已解析,则不会从输入uri重定向),下面的函数添加一个参数来解析我们添加的查询变量。Wp通过index.php路由所有内容,查询变量决定要执行的post/操作。第三个参考是再次获取查询变量(ea函数是独立的),并提供您想要的php文件。