自定义查询提要的自定义重写规则(URL中的Query_var查询字符串)?

时间:2013-11-06 作者:its_me

问题已更新

如果我想显示属于类别和自定义分类法、类别和标记、自定义分类法和标记的帖子(或帖子提要),我可以使用查询变量作为URL中的查询字符串。

但我想先美化URL,如下所示:

  • example.com/?category_name=main&channel=tech to example.com/main/channel/tech/

  • example.com/?category_name=main&channel=tech&feed=rss2 to example.com/main/channel/tech/feed/

  • example.com/?category_name=main&tag=jsyk to example.com/main/tag/jsyk/

  • example.com/?category_name=main&tag=jsyk&feed=rss2 to example.com/main/tag/jsyk/feed/

其中category_name 定义slug类别,channel 自定义分类法“通道”术语的slug,以及tag 标签slug。

我是如何做到的首先,我试着阅读尽可能多的例子,包括:

我将我网站的所有主题无关功能都放在一个必用插件中,如下所示:

<?php
/*
 * Plugin Name: Default Functions
 * Description: Site-specific functions for example.com
 */

/* Add functions below */



/* THE END */
我在这里添加了重写函数,如下所示:

function wtnerd_edition_specific_categories( $wp_rewrite ) {
    $rewrite_rules = array(
        \'([a-zA-Z0-9-_^/]+)/channel/([a-zA-Z0-9-_^/]+)\' => \'index.php?category_name=\'.$wp_rewrite->preg_index(1).\'&channel=\'.$wp_rewrite->preg_index(2),

        \'([a-zA-Z0-9-_^/]+)/channel/([a-zA-Z0-9-_^/]+)/feed\' => \'index.php?category_name=\'.$wp_rewrite->preg_index(1).\'&channel=\'.$wp_rewrite->preg_index(2).\'&feed=rss2\',

        \'([a-zA-Z0-9-_^/]+)/section/([a-zA-Z0-9-_^/]+)\' => \'index.php?category_name=\'.$wp_rewrite->preg_index(1).\'&tag=\'.$wp_rewrite->preg_index(2),

        \'([a-zA-Z0-9-_^/]+)/section/([a-zA-Z0-9-_^/]+)/feed\' => \'index.php?category_name=\'.$wp_rewrite->preg_index(1).\'&tag=\'.$wp_rewrite->preg_index(2).\'&feed=rss2\'
    );
    $wp_rewrite->rules = $rewrite_rules + $wp_rewrite->rules;
}
add_filter( \'generate_rewrite_rules\', \'wtnerd_edition_specific_categories\' );
问题feed URL不工作。例如:

example.com/main/channel/tech/feed/
加载content-none.php 模板,而不是显示属于上述条款的帖子的实际提要。

我不知道如何解决这个问题。

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

您可以使用add_rewrite_rule 连接到init 操作,而不是使用generate_rewrite_rules 过滤器(其中it gets a bit low-level).

但重写规则的实际问题是存在正则表达式。下面是它的样子:

function wtnerd_edition_specific_categories() {
    add_rewrite_rule( \'(.+?)/channel/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\', \'index.php?category_name=$matches[1]&channel=$matches[2]&feed=$matches[3]\', \'top\' );
    add_rewrite_rule( \'(.+?)/channel/(.+?)/(feed|rdf|rss|rss2|atom)/?$\', \'index.php?category_name=$matches[1]&channel=$matches[2]&feed=$matches[3]\', \'top\' );
    add_rewrite_rule( \'(.+?)/channel/(.+?)/page/?([0-9]{1,})/?$\', \'index.php?category_name=$matches[1]&channel=$matches[2]&paged=$matches[3]\', \'top\' );
    add_rewrite_rule( \'(.+?)/channel/(.+?)/?$\', \'index.php?category_name=$matches[1]&channel=$matches[2]\', \'top\' );

    add_rewrite_rule( \'(.+?)/section/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\', \'index.php?category_name=$matches[1]&tag=$matches[2]&feed=$matches[3]\', \'top\' );
    add_rewrite_rule( \'(.+?)/section/(.+?)/(feed|rdf|rss|rss2|atom)/?$\', \'index.php?category_name=$matches[1]&tag=$matches[2]&feed=$matches[3]\', \'top\' );
    add_rewrite_rule( \'(.+?)/section/(.+?)/page/?([0-9]{1,})/?$\', \'index.php?category_name=$matches[1]&tag=$matches[2]&paged=$matches[3]\', \'top\' );
    add_rewrite_rule( \'(.+?)/section/(.+?)/?$\', \'index.php?category_name=$matches[1]&tag=$matches[2]\', \'top\' );
}
add_action( \'init\', \'wtnerd_edition_specific_categories\' );
您还可以使用rewrite_rules_array 过滤器挂钩。

结束

相关推荐

Theme URLs problem

我编写了一篇主题文章(编辑:可能是single.php 模板)使用该函数get_userdata( $_GET[\'p\'] ). 但主管理员将URL重新格式化为:~/author/gamelaster (默认值为?author=1) 现在,这是不正确的工作。如何获取此URL格式的作者id?或如何从数据库中获取用户slug+get id?但是,我不能使用标准的author函数/post函数(get\\u ID等)。