我有一个“产品”的自定义帖子类型,自定义分类法为“产品线”我已经设置了一个页面,按产品线列出产品。然而,我们也只在主页上使用“特色产品”的产品线。我们不希望“特色产品”显示在“所有产品”页面中。我有以下循环。
<?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
部分我不想显示“特色产品”这一术语,我已经这样做了。但使用此代码,它不会显示任何带有“特色产品”的产品我仍然需要在其他产品线术语下显示产品,我只需要不显示特色产品术语。有什么想法吗?
最合适的回答,由SO网友:Pieter Goosen 整理而成
我不确定您的设置看起来如何,但您似乎有很多分类法注册到了您的帖子类型,因此我认为在中使用exclude参数不是很可行get_terms()
排除特定术语。
我的建议是foreach
循环在声明查询参数之前,添加以下行
if ( $term->slug == \'featured-products\' )
continue;
这将跳过查询的特定术语。您还应该删除
tax_query
排除特色产品术语。这将确保您仍能获得其他条款下的特色产品
请注意,您的查询非常昂贵,而且对数据库的影响非常大。我建议您考虑缓存结果以优化查询。您还可以查看瞬态