基于分类的归档模板

时间:2014-05-26 作者:xporj

我有一个自定义的帖子类型,服务提供者,有两个分类法,区域和服务。我想根据分类法制作一个模板。

function template_taxonomy($template) {
    if (is_archive()) {
        if ((is_tax(\'service\') and is_tax(\'area\')) or is_tax(\'service\')) {
            $template = locate_template( array( \'taxonomy_service.php\' ) );
        } else if (is_tax(\'area\') and !(is_tax(\'service\'))) {
            $template = locate_template( array( \'taxonomy_area.php\' ) );
        }
    }
    return $template;
}
代码非常简单,但我的问题是,当我尝试访问此URL时

http://www.site.com/?service-provider&service=electricians&area=north-shore-lower

服务分类法似乎不存在,因此它使用taxonomy\\u区域。php模板。还尝试只使用taxonomy\\u服务。php模板上似乎也不存在区域分类法。

有什么想法吗?

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

如果您试图显示属于两个或多个分类术语的帖子列表,则使用了错误的URL。如果您是usgin pretty permalinks,则应该是:

 www.example.com/service-provider/?service=electricians&area=north-shore-lower
如果您没有使用pretty permalinks,那么应该是:

 www.example.com/?post-type=service-provider&service=electricians&area=north-shore-lower
无论如何,您应该在multitax存档页中,并且不能使用is_tax(), 用于检查单个分类法归档的函数。您可以使用一些替代方法,例如检查实际的$wp\\u查询对象:

add_filter(\'template_include\', \'wpse_multietax_template\');
function wpse_multietax_template( $template ){

    global $wp_query;

    if( (isset($wp_query->query_vars[\'service\']) && isset($wp_query->query_vars[\'area\'])) || isset($wp_query->query_vars[\'service\']) ) {
         $template = locate_template( array( \'taxonomy_service.php\' ) );
    } else if ( isset($wp_query->query_vars[\'area\']) && !isset($wp_query->query_vars[\'service\']) ) {
         $template = locate_template( array( \'taxonomy_area.php\' ) );
    }

    return $template;
}

结束

相关推荐

Removing a taxonomy term

有一个名为wp\\u remove\\u object\\u terms的Wordpress函数,不幸的是,它似乎不起作用。我试图通过以下方法达到同样的目的 $post_terms = wp_get_object_terms( $post_id, $taxonomy ); if( $post_terms ){ if(($key = array_search($term_id, $po