WP重写URL的最后两部分

时间:2014-02-08 作者:Elian ten Holder

我找到了很多关于WP重写的帖子,但我找不到合适的词来描述这个问题。

我正在努力实现以下目标:mysite.com/examentraining/vak/biologie/havo将重写为/examentraining/vak?vakname=biologie&level=havo

所以当用户输入mysite.com/examentraining/vak/biologie/havo 在地址栏中,应显示mysite.com/examentraining/vak/ 页面,但应用程序应该能够使用斜杠之间的最后两个值作为get参数(因此对于短代码脚本,url必须如下所示/examentraining/vak?vakname=biologie&level=havo)

我已经试过了http://codex.wordpress.org/Function_Reference/WP_Rewrite. 但最接近我的例子使用了一个数字,并且只使用变量。在这一点上,语法对我来说没有足够的意义来适应我的需要。另外,当我想使用两个变量时,我是否必须调用我的\\u insert\\u query\\u vars($vars)两次?

我希望没有一个像我一样的问题我没有找到。

编辑2周多后我仍然没有解决这个问题。

我做了以下操作,但似乎不起作用,规则被正确导入(通过wordpress插件检查,插件甚至说规则与请求url匹配)。但它不会重写。

 // Adding a new rule
    function my_insert_rewrite_rules($rules)
    {
        $newrules = array();
        $newrules[\'examentraining/training/([0-9]{1,})/?$\'] = \'index.php/?p=1320&id=$matches[1]\';   
        return $newrules + $rules;
    }

// Adding the id var so that WP recognizes it
    function my_insert_query_vars($vars)
    {
        array_push($vars, \'id\');
        return $vars;
    }
我首先尝试了一个更简单的示例,我想重写这段代码example.com/examentraining/training/513/ to example.com/?p=1320&id=513因此,我想打开页面id为1320的页面(这很有效),并将id参数传递到此页面,以便我的php代码可以通过$wp_query->query_vars[\'trainingid\'] 或者通过$\\u GET[\'trainingid\'](访问url/?p=1320和id=513正常工作)。此url中唯一更改的是id的最后一部分(示例中为513)。

谁能告诉我重写规则出了什么问题吗?

编辑2

我后来读到,在wordpress中使用id这样的通用get参数是不明智的,所以我改变了这一点,并尝试了另一种获取页面的方法(直接从wordpress调用Als时,Als可以工作)

/ Adding a new rule
    function my_insert_rewrite_rules($rules)
    {
        $newrules = array();
        $newrules[\'examentraining/training/([0-9]+)/?$\'] = \'index.php?pagename=examentraining/training&trainingid=$matches[1]\';
        return $newrules + $rules;
    }

// Adding the id var so that WP recognizes it
    function my_insert_query_vars($vars)
    {
        array_push($vars, \'trainingid\');
        return $vars;
    }
为了测试,我每次初始化都刷新规则。

我会继续寻找,但我真的希望有人能给我指出正确的方向。

1 个回复
最合适的回答,由SO网友:Elian ten Holder 整理而成

我终于解决了重写规则的问题。我使用了这个问题答案中列出的课程wordpress.stackoverflow question. 在包含该类之后,我使用以下代码使其工作:

 // These query vars can be retrieved on the page by using get_query_var( \'queryvar1\' );
    $options = array(
            \'query_vars\' => array(
                \'queryvar1\',
                \'queryvar2\',
                \'queryvar3\',
                \'queryvar4\',
                \'queryvar5\',
                \'queryvar6\'
            ),
            \'rules\'      => array(
            \'uncategorized/somename/([^/]+)/?$\'=> \'index.php?p=1020&ident=$matches[1]\'

            )
        );
        $rewrite = new AddRewriteRules( $options );
        add_action( \'wp_head\', array(
            &$rewrite,
            \'flush_rules\'
        ) );
        add_action( \'generate_rewrite_rules\', array(
            &$rewrite,
            \'add_rewrite_rules\'
        ) );
        add_filter( \'query_vars\', array(
            &$rewrite,
            \'add_query_vars\'
        ) );
我希望这对有同样问题的人有用。

结束

相关推荐