在自定义POST类型上传递固定链接结构中的变量

时间:2014-03-12 作者:ThePHPUnicorn

我的自定义帖子类型有如下结构:

领域com/成员/成员名称/书籍/书籍名称

基本上,我有一个自定义的post类型的成员,成员名称就是post。我要做的是传递一个名为books的变量,但我无法让代码正常工作。

我的解决方案是基于之前在这里被问到的,但我的结构是不同的,我一直在谷歌上搜索,但没有结果。我也真的无法理解重写结构!

    function add_book_rewrite() {
        add_rewrite_tag(\'%book_name%\',\'([^&]+)\');
    }
    add_action( \'init\', \'add_book_rewrite\' );

    function add_book_rewrite_rules() {
        add_rewrite_rule(\'^member/([^/]*)/book/([^/]*)/?\',\'index.php?post_type=member&name=$matches[2]&book_name=$matches[4]\',\'top\');
    }
    add_action( \'init\', \'add_book_rewrite_rules\' );

    add_filter( \'query_vars\', \'add_query_var\' );

    function add_query_var( $query_vars ) {

        $query_vars[] = \'book_name\';
        return $query_vars;
    }

    echo \'Book is \'.get_query_var(\'book_name\');
如果有任何关于这方面的建议,我们将不胜感激

谢谢

1 个回复
SO网友:Milo

首先,添加重写标记和查询变量是多余的,添加标记会添加查询变量。

第二$matches 对应于规则中的每个正则表达式模式,因此$matches[1]$matches[2], 不是2和4。

最后,对于单个member, 您只需设置member 查询变量。

add_rewrite_rule(
    \'^member/([^/]*)/book/([^/]*)/?\',
    \'index.php?member=$matches[1]&book_name=$matches[2]\',
    \'top\'
);
未经测试,但应该会让你朝着正确的方向前进。也看看这个rewrite analyzer plugin 帮助您构建重写规则。

结束

相关推荐