我使用高级自定义字段向自定义帖子类型添加元信息,在ACF中我创建了两个不同的“选择”下拉列表,一个称为“系列”,另一个称为“分类”。
我使用以下代码运行查询以显示所有带有“系列”术语“编译”的帖子:
<?php
$args_post = array(\'post_type\' => \'release\', \'orderby\' => \'_custom\', \'order\' => \'ASC\', \'posts_per_page\' => -1, \'meta_query\' => array(
array(
\'key\' => \'series\',
\'value\' => \'Compilation\',
),
),
);
$loop = new WP_Query($args_post);
while ($loop->have_posts() ) : $loop->the_post();
?>
<li><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
它完美地显示了正确的结果。
但是,使用此代码尝试使用“分类”术语“数据”进行查询时:
<?php
$args_post = array(\'post_type\' => \'release\', \'orderby\' => \'_custom\', \'order\' => \'ASC\', \'posts_per_page\' => -1, \'meta_query\' => array(
array(
\'key\' => \'classification\',
\'value\' => \'Data\',
),
),
);
$loop = new WP_Query($args_post);
while ($loop->have_posts() ) : $loop->the_post();
?>
<li><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
那么它不会返回任何内容。我在每个领域都尝试过其他术语——“系列”术语工作得很好,而“分类”术语都不起作用。我仔细检查了一下,我没有做一些愚蠢的事情,比如忘记将页面模板应用到正确的页面,或者忘记将帖子与术语关联,但一切看起来都像是应该做的。我也检查了一些愚蠢的拼写错误,但一切都正常。
我首先使用“系列”术语为帖子编写代码,然后直接复制粘贴,然后更改元键和值以匹配“分类”帖子,因此除了这两个小更改(+页面模板名称)之外,代码是相同的。
我是不是遗漏了什么?
UPDATE
所以我找到了我所遗漏的明显的东西。”“系列”术语只能是一个值,而“分类”允许多个含义它是一个数组。然而,我似乎仍然不知道如何显示正确的帖子。我把电话改成了
\'value\' => array(\'Data\'),
但这似乎并没有改变什么。我也不确定这是否是正确的方法。
最合适的回答,由SO网友:rpbtz 整理而成
我发现an older post 显示了代码中缺少的内容,因此我似乎没有从一开始就进行足够好的搜索。
任何想知道我失踪的人\'compare\' => \'LIKE\'
因此代码如下所示:
$args_post = array(\'post_type\' => \'release\', \'orderby\' => \'_custom\', \'order\' => \'ASC\', \'posts_per_page\' => -1, \'meta_query\' => array(
array(
\'key\' => \'classification\',
\'value\' => \'Data\',
\'compare\' => \'LIKE\',
),
),
);
现在一切都很顺利!
UPDATE
虽然此解决方案可行,但请注意@PieterGoosen对问题的评论:
LIKE
进行比较非常昂贵。此外,序列化数据实际上并不用于搜索和排序操作。这里的问题是LIKE
如果你搜索dot
, mydot
, dot
, dotcom
也返回了
什么LIKE
比较器做的是,它不像比较器那样搜索精确的数学IN
可以。它搜索任何可能与术语匹配的内容。如果要在何处搜索自定义字段值,请执行以下操作dot
, 或者像你的例子那样Data
, like比较器将搜索并返回按顺序排列的这4个字母的任何内容data
, 所以它会回来Data
, data-mining
, database
和crappy-data
如果数据库中有这4个单词。所以这使得LIKE
非常不可靠,这就是为什么您应该避免序列化数据