我遇到了一些我以前从未见过的非常奇怪的事情。我正在尝试查询custom-post-type
并按自定义分类法将结果组织到组中term
. 这个post
是一个项目,由taxonomy
州政府。
问题是,所有的状态都在打印出来,但其中一些状态没有显示任何关联的项目(即使它们有一些,也在切换hide_empty
之间true
和false
产生预期结果)。我尝试了一些术语名称的组合,但似乎只有在分类术语有两个词的名称时才会出现这种情况:例如,“北达科他州”。如果我将项目的状态更改为不同的(单一命名)状态,数据会显示出来。
通常这看起来像:
状态1
项目状态2
但有些州只显示其名称(分类术语名称),下面没有项目。
状态3
州4
我注意到这两个命名州的鼻涕虫被连接成了一个单词(northdakota
), 所以我不确定这是否是造成这种情况的原因。我试着回到过去north-dakota
没有运气。删除后,数据库中是否存在可能存在冲突的地方?术语似乎没有垃圾页。
这是我使用Gutenberg和ACF Gutenblocks构建的第一个项目,但我不知道这是怎么造成的,尤其是因为我查询的所有数据都是这个特定块的核心部分。
我是错过了什么,还是这是某种错误?
<?php
$states = get_terms( array(
\'taxonomy\' => \'state\',
\'hide_empty\' => true,
) );
foreach ( $states as $state ) {
$state_name = $state->name;
$state_slug = $state->slug;
?>
<div class="state <?php echo esc_attr( $state_slug ); ?> mix">
<h3 class="state-heading"><?php echo esc_attr( $state_name ); ?></h3>
<?php
$args = array(
\'post_type\' => \'project\',
\'posts_per_page\' => - 1,
\'orderby\' => \'title\',
\'order\' => \'ASC\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'state\',
\'field\' => \'name\',
\'terms\' => $state_slug,
),
),
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div class="project">
<div class="row">
<div class="col-md-6 d-flex flex-column justify-content-center">
<?php
$title = get_the_title();
$excerpt = get_the_excerpt();
$permalink = get_the_permalink();
echo \'<h4>\' . esc_attr( $title ) . \'</h4>\';
echo \'<p>\' . esc_attr( $excerpt ) . \'</p>\';
echo \'<div><a class="button" href="\' . esc_url( $permalink ) . \'">View</a></div>\';
?>
</div>
<div class="col-md-6 d-flex align-items-center">
<?php the_post_thumbnail(); ?>
</div>
</div>
</div>
<?php
endwhile;
wp_reset_postdata();
?>
</div>
<?php }
?>
最合适的回答,由SO网友:Sally CJ 整理而成
问题是你的tax_query
— 这个field
(数据库列名)与terms
(数据库列值):
$args = array(
...
\'tax_query\' => array(
array(
\'taxonomy\' => \'state\',
\'field\' => \'name\', // <- this should be set to \'slug\'
\'terms\' => $state_slug, // because you provided term slug
),
),
);
一、 e.如果您提供术语段塞(例如。
foo-bar
), 然后
field
应该是
slug
; 如果您提供术语名称(例如。
Foo Bar
), 然后
field
应该是
name
.