Wordpress URL rewrite regex

时间:2016-08-19 作者:4t0m1c

我在尝试学习如何将此url写入regex模板以作为重写添加时遇到了困难。我已经尝试了各种regex沙盒来自己解决这个问题,但它们不允许使用“/”,例如,当我从这里复制表达式进行测试时:enter image description here

我有一个自定义的帖子类型(出版物),其中包含两个分类法(杂志、期刊),我正试图为其创建一个好看的url。

几个小时后,我来到这里,想知道如何转换这个

index.php?post_type=publications&magazine=test-mag&issue=2016-aug
到一个模板化的正则表达式(publicationmagazineissue是常量),可以输出

http://example.com/test-mag/2016-aug/
如果一篇文章是从那一页看完的,希望还有扩展的空间。

提前谢谢。

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

从wordpress文档中-https://codex.wordpress.org/Using_Permalinks

将%category%用于一篇文章的多个类别

当您为一篇文章分配多个类别时,永久链接中只能显示一个类别。类别按字母顺序排列。在每组子类别中,顺序也将按字母顺序排列。(请参见管理类别)。这篇文章仍然可以通过所有类别正常访问。

但是,您可以通过使用slug创建一个页面来达到您想要的效果listpublications 并添加以下代码:

add_action(\'init\', \'rewrite\');
add_filter(\'query_vars\', \'query_vars\');

function rewrite(){
    add_rewrite_rule(\'listpublications/([^/]+)/([^/]+)/?$\', \'index.php?pagename=listpublications&magazine=$matches[1]&issue=$matches[2]\',\'top\');
}

function query_vars($query_vars) {
    $query_vars[] = \'magazine\';
    $query_vars[] = \'issue\';
    return $query_vars;
}
现在转到设置->永久链接,然后单击保存。这将添加新的重写规则very important.

现在在主题文件夹中创建一个名为page-listpublications.php 并在页脚和页眉之间添加以下代码。

 global $wp_query;

    $query_args = array(
    // show all posts matching this query
        \'posts_per_page\'    =>   -1,
    // show the \'publications\' custom post type
        \'post_type\'         =>   \'publications\',
        // query for you custom taxonomy stuff
        \'taq_query\' => array(
            array(
                \'taxonomy\'  =>   \'magazine\',
                \'field\'     =>   \'slug\',
                \'terms\'     =>   $wp_query->query_vars[\'magazine\']
                ),
            array(
                \'taxonomy\'  =>   \'issue\',
                \'field\'     =>   \'slug\',
                \'terms\'     =>   $wp_query->query_vars[\'issue\']
                )
            )

        );

   //fetch results from DB
    $query = new WP_Query( $query_args );

    if ($query->have_posts()):  while ($query->have_posts()): $query->the_post(); 
     // do something sweet with the results
    the_content();
访问www.yourdomain.com/listpublications/test-mag/2016-aug 应在《测试》杂志和2016年8月号上为您提供所有出版物。

希望这有帮助:)