Filter posts on new page

时间:2017-09-30 作者:Влад

我想为分类页面上的帖子创建过滤器。我想为这些过滤器创建新页面,并将指向它们的链接放在分类页面上,但我需要保存URL结构。例如,目前我有:http://example.com/custom_taxonomy/term/child_term

例如,我想按价格订购帖子,我想有下一个URL:http://example.com/custom_taxonomy/term/child_term/low-pricehttp://example.com/custom_taxonomy/term/child_term/high-price

有可能吗?

1 个回复
SO网友:Milo

您可以通过重写端点和pre_get_posts 行动

首先,您的分类法必须注册到一些特定的rewrite 支持这一点的参数,尤其是,ep_mask:

register_taxonomy(
    \'customtax\',
    \'posttype\',
    array(
        \'rewrite\' => array(
            \'slug\' => \'custom-tax\',
            \'hierarchical\' => true,
            \'ep_mask\' => EP_ALL
        ),
        // other args...
    )
);
然后,您可以为过滤器添加端点,也可以在init 措施:

add_rewrite_endpoint( \'low-price\', EP_ALL );
请注意,此时需要刷新重写规则才能存在新端点。

最后一步是挂钩pre_get_posts 并检测low-price 端点,并将适当的元参数应用于查询:

function wpd_filter_my_tax( $query ) {
    if ( $query->is_tax( \'customtax\' )
         && $query->is_main_query()
         && isset( $query->query_vars[\'low-price\'] ) ) {
            $query->set( \'meta_key\', \'price\' );
            $query->set( \'orderby\', \'meta_value_num\' );
            $query->set( \'order\', \'ASC\' );
    }
}
add_action( \'pre_get_posts\', \'wpd_filter_my_tax\' );

结束