列出术语的帖子,但不包括一个术语

时间:2015-03-01 作者:user3571316

我有一个“产品”的自定义帖子类型,自定义分类法为“产品线”我已经设置了一个页面,按产品线列出产品。然而,我们也只在主页上使用“特色产品”的产品线。我们不希望“特色产品”显示在“所有产品”页面中。我有以下循环。

  <?php 
    $post_type = \'products\';
    $taxonomies = get_object_taxonomies( $post_type );

    foreach ($taxonomies as $taxonomy){
        $terms = get_terms($taxonomy, array(\'orderby\' => \'date\', \'order\' => \'ASC\'));

        if ( !empty( $terms ) && !is_wp_error( $terms ) ){
            foreach ( $terms as $term ) {
                $args = array(
                    \'post_type\'           => $post_type,
                    \'orderby\'             => \'date\',
                    \'order\'               => \'ASC\',
                    \'ignore_sticky_posts\' => 1,
                    \'post_status\'         => \'publish\',
                    \'posts_per_page\'      => - 1,
                    \'tax_query\'           => array(
                        array(
                            \'taxonomy\'    => $taxonomy,
                            \'field\'       => \'slug\',
                            \'terms\'       => $term->slug,
                            \'operator\'    => \'IN\'
                        ),
                        array(
                            \'taxonomy\'    => $taxonomy,
                            \'field\'       => \'slug\',
                            \'terms\'       => \'featured-products\',
                            \'operator\'    => \'NOT IN\'
                        )
                    )
                );
                $my_query = null;
                $my_query = new WP_Query($args);
                if ($my_query->have_posts()) {
                    echo \'<div class="resource"><h2>\' . $term->name . \'</h2>\';

                        while ($my_query->have_posts()) : $my_query->the_post(); ?>

                            <ul>
                              <li>
                                <div class="resource_image_helper">
                                    <a href="<?php the_permalink(); ?>"><img src="<?php the_field(\'mobile_image\'); ?>"></a>
                                </div>
                                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                                <ul>
                                    <?php
                                      // Grab the title and change for slug
                                        $title    = get_the_title();
                                        $stripped = sanitize_title_with_dashes($title);

                                      $literature = do_shortcode(\'[downloads category=\'.$stripped.\']\');
                                      $photos     = get_field(\'tab_photos\');
                                    ?>  

                                    <?php if(!empty($photos)): ?> 
                                        <li>
                                          <a href="<?php the_permalink(); ?>">Photos</a>
                                        </li>
                                    <?php endif; ?>

                                        <li>
                                          <a href="<?php the_permalink(); ?>">Videos</a>
                                        </li>

                                    <?php if(!empty($literature)): ?> 
                                        <li>
                                          <a href="<?php the_permalink(); ?>">Literature</a>
                                        </li>
                                    <?php endif; ?>

                                </ul>
                              </li>
                            </ul>

                        <?php
                        endwhile; 
                    echo \'</div>\';
                } // END if have_posts loop
                wp_reset_query(); 
            } // END foreach $terms
        }
    }
  ?>
我的问题是tax_query 部分我不想显示“特色产品”这一术语,我已经这样做了。但使用此代码,它不会显示任何带有“特色产品”的产品我仍然需要在其他产品线术语下显示产品,我只需要不显示特色产品术语。有什么想法吗?

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

我不确定您的设置看起来如何,但您似乎有很多分类法注册到了您的帖子类型,因此我认为在中使用exclude参数不是很可行get_terms() 排除特定术语。

我的建议是foreach 循环在声明查询参数之前,添加以下行

if ( $term->slug == \'featured-products\' )
    continue;
这将跳过查询的特定术语。您还应该删除tax_query 排除特色产品术语。这将确保您仍能获得其他条款下的特色产品

请注意,您的查询非常昂贵,而且对数据库的影响非常大。我建议您考虑缓存结果以优化查询。您还可以查看瞬态

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post

列出术语的帖子,但不包括一个术语 - 小码农CODE - 行之有效找到问题解决它

列出术语的帖子,但不包括一个术语

时间:2015-03-01 作者:user3571316

我有一个“产品”的自定义帖子类型,自定义分类法为“产品线”我已经设置了一个页面,按产品线列出产品。然而,我们也只在主页上使用“特色产品”的产品线。我们不希望“特色产品”显示在“所有产品”页面中。我有以下循环。

  <?php 
    $post_type = \'products\';
    $taxonomies = get_object_taxonomies( $post_type );

    foreach ($taxonomies as $taxonomy){
        $terms = get_terms($taxonomy, array(\'orderby\' => \'date\', \'order\' => \'ASC\'));

        if ( !empty( $terms ) && !is_wp_error( $terms ) ){
            foreach ( $terms as $term ) {
                $args = array(
                    \'post_type\'           => $post_type,
                    \'orderby\'             => \'date\',
                    \'order\'               => \'ASC\',
                    \'ignore_sticky_posts\' => 1,
                    \'post_status\'         => \'publish\',
                    \'posts_per_page\'      => - 1,
                    \'tax_query\'           => array(
                        array(
                            \'taxonomy\'    => $taxonomy,
                            \'field\'       => \'slug\',
                            \'terms\'       => $term->slug,
                            \'operator\'    => \'IN\'
                        ),
                        array(
                            \'taxonomy\'    => $taxonomy,
                            \'field\'       => \'slug\',
                            \'terms\'       => \'featured-products\',
                            \'operator\'    => \'NOT IN\'
                        )
                    )
                );
                $my_query = null;
                $my_query = new WP_Query($args);
                if ($my_query->have_posts()) {
                    echo \'<div class="resource"><h2>\' . $term->name . \'</h2>\';

                        while ($my_query->have_posts()) : $my_query->the_post(); ?>

                            <ul>
                              <li>
                                <div class="resource_image_helper">
                                    <a href="<?php the_permalink(); ?>"><img src="<?php the_field(\'mobile_image\'); ?>"></a>
                                </div>
                                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                                <ul>
                                    <?php
                                      // Grab the title and change for slug
                                        $title    = get_the_title();
                                        $stripped = sanitize_title_with_dashes($title);

                                      $literature = do_shortcode(\'[downloads category=\'.$stripped.\']\');
                                      $photos     = get_field(\'tab_photos\');
                                    ?>  

                                    <?php if(!empty($photos)): ?> 
                                        <li>
                                          <a href="<?php the_permalink(); ?>">Photos</a>
                                        </li>
                                    <?php endif; ?>

                                        <li>
                                          <a href="<?php the_permalink(); ?>">Videos</a>
                                        </li>

                                    <?php if(!empty($literature)): ?> 
                                        <li>
                                          <a href="<?php the_permalink(); ?>">Literature</a>
                                        </li>
                                    <?php endif; ?>

                                </ul>
                              </li>
                            </ul>

                        <?php
                        endwhile; 
                    echo \'</div>\';
                } // END if have_posts loop
                wp_reset_query(); 
            } // END foreach $terms
        }
    }
  ?>
我的问题是tax_query 部分我不想显示“特色产品”这一术语,我已经这样做了。但使用此代码,它不会显示任何带有“特色产品”的产品我仍然需要在其他产品线术语下显示产品,我只需要不显示特色产品术语。有什么想法吗?

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

我不确定您的设置看起来如何,但您似乎有很多分类法注册到了您的帖子类型,因此我认为在中使用exclude参数不是很可行get_terms() 排除特定术语。

我的建议是foreach 循环在声明查询参数之前,添加以下行

if ( $term->slug == \'featured-products\' )
    continue;
这将跳过查询的特定术语。您还应该删除tax_query 排除特色产品术语。这将确保您仍能获得其他条款下的特色产品

请注意,您的查询非常昂贵,而且对数据库的影响非常大。我建议您考虑缓存结果以优化查询。您还可以查看瞬态

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post