首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分类法档案,按其他分类法分类,不隐藏空分类法

分类法档案,按其他分类法分类,不隐藏空分类法
EN

WordPress Development用户
提问于 2018-03-26 05:04:51
回答 1查看 165关注 0票数 0

关于我的设置的Info:

  • 我有一个定制的帖子类型叫做“治疗”
  • 每种治疗可分为3种分类类型--治疗类别--“美容院”、“皮肤怪癖”、“spadays”,它们下面有许多不同的类别。
  • 治疗也可以附加到一个品牌,也可以是一个分类法??“品牌”。

我正在尝试实现的What:

在治疗类别存档页面上显示治疗,但按品牌分类法划分,还包括未附加到品牌分类法的类别内的治疗。所以档案页面应该是这样的:

Treatment类别标题

Brand 1

  • 治疗A
  • 治疗B
  • 处理C

Brand 2

  • 治疗D
  • 治疗E
  • 治疗F

(无品牌)

  • 治疗J
  • 处理K
  • L治疗

我在每个分类法页面上都做了一个taxonomy.php模板,但是.

My问题是:

1)我无法找到一种方法来阻止空处理类别标题的显示。我认为我需要在某个地方插入一个foreach或IF语句,或者可能更改$args数组,以便只返回包含处理的类别。我尝试过包括hide_empty语句,但这似乎也不起作用。

2)当我根据品牌分类设置查询时,我不能将不附加于任何品牌的处理显示出来。也许我需要两个循环?

这是我的密码,有什么帮助吗?

代码语言:javascript
复制
taxonomy;
$term_id = $queried_object->term_id;

// fetch the terms for brands tax
$terms = get_terms( 'brands', array(
    'orderby'    => 'title',
        'order'   => 'ASC',
        'hide_empty' => true,
) );

the_archive_title( '', '' );

// now run a query for each brand
foreach( $terms as $term ) {

    $args = array(
        'post_type' => 'treatments',
        'nopaging' => true,
        'orderby' => 'title',
        'order'   => 'ASC',
        'hide_empty'   => true,
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'brands',
                'terms' => $term->slug,
                'field' => 'slug',
                'operator' => 'IN'
            ),
            array(
                'relation' => 'OR',
                array(
                    'taxonomy' => 'beautysalon',
                    'terms' => $queried_object->slug,
                    'field' => 'slug',
                    'operator' => 'IN'
                ),
                array(
                    'taxonomy' => 'skinclinic',
                    'terms' => $queried_object->slug,
                    'field' => 'slug',
                    'operator' => 'IN'
                ),
                array(
                    'taxonomy' => 'spadays',
                    'terms' => $queried_object->slug,
                    'field' => 'slug',
                    'operator' => 'IN'
                ),
            )
        )
    );
    $query = new WP_Query( $args );

// output the term name in a heading tag
echo'' . $term->name . '';
// output the post titles in a list
echo '';
while ( $query->have_posts() ) : $query->the_post(); ?>

        
            
        

        ';
    wp_reset_postdata();

} ?>
EN

回答 1

WordPress Development用户

回答已采纳

发布于 2018-03-26 09:46:15

1)修复这个问题非常简单--我用if have_posts包装了类别名称请求,从而去掉了空值。

2)我必须包括一个使用'operator' => 'NOT IN'的次级循环,以列出不属于分类法的治疗方法。

我相信有一个更精简和更好的方法来做下面的事情,但就目前而言,这为我想做的事情服务。

最终代码

代码语言:javascript
复制
taxonomy;
            $term_id = $queried_object->term_id;

            // fetch the terms for brands tax
            $terms = get_terms( 'brands', array(
                'orderby'    => 'title',
                'order'   => 'ASC',
                'hide_empty' => true,
                'posts_per_page' => -1,
            ) );

            the_archive_title( '', '' );

            // now run a query for each brand
            foreach( $terms as $term ) {

                $args = array(
                    'post_type' => 'treatments',
                    'nopaging' => true,
                    'orderby' => 'title',
                    'order'   => 'ASC',
                    'hide_empty'   => true,
                    'posts_per_page' => -1,
                    'tax_query' => array(
                        array(
                            'taxonomy' => 'brands',
                            'terms' => $term->slug,
                            'field' => 'slug',
                            'operator' => 'IN',
                            'hide_empty'   => true,
                        ),
                        array(
                            'relation' => 'OR',
                            array(
                                'taxonomy' => 'beautysalon',
                                'terms' => $queried_object->slug,
                                'field' => 'slug',
                                'operator' => 'IN'
                            ),
                            array(
                                'taxonomy' => 'skinclinic',
                                'terms' => $queried_object->slug,
                                'field' => 'slug',
                                'operator' => 'IN'
                            ),
                            array(
                                'taxonomy' => 'spadays',
                                'terms' => $queried_object->slug,
                                'field' => 'slug',
                                'operator' => 'IN'
                            ),
                        )
                    )
                );
                $query = new WP_Query( $args );

// only show a header if there is posts present 
if( $query->have_posts() ) :
echo'' . $term->name . '';
echo '';
while ( $query->have_posts() ) :
$query->the_post(); ?>

                
                    
                

            ';
endif;
wp_reset_postdata();
}
        // second query - everything not in a brand
        $args = array(
            'post_type' => 'treatments',
            'nopaging' => true,
            'orderby' => 'title',
            'order'   => 'ASC',
            'tax_query' => array(
                array(
                    'taxonomy' => 'brands',
                    'terms' => $term->slug,
                    'field' => 'term_id',
                    'operator' => 'NOT IN',
                ),
                array(
                    'relation' => 'OR',
                    array(
                        'taxonomy' => 'beautysalon',
                        'terms' => $queried_object->slug,
                        'field' => 'slug',
                        'operator' => 'IN'
                    ),
                    array(
                        'taxonomy' => 'skinclinic',
                        'terms' => $queried_object->slug,
                        'field' => 'slug',
                        'operator' => 'IN'
                    ),
                    array(
                        'taxonomy' => 'spadays',
                        'terms' => $queried_object->slug,
                        'field' => 'slug',
                        'operator' => 'IN'
                    ),
                )
            ));
            $the_query = new WP_Query( $args );

            if ( $the_query->have_posts() ) :
                echo 'Other ' . $queried_object->name . ' Treatments';
                while ( $the_query->have_posts() ) : $the_query->the_post();
                ?>

                
                    
                

            ';
        wp_reset_postdata();
        ?>
票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/298900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档