两个几乎相同的自定义字段类型-一个可以工作,另一个不能。是什么导致了这种情况?

时间:2016-02-11 作者:rpbtz

我使用高级自定义字段向自定义帖子类型添加元信息,在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\'), 但这似乎并没有改变什么。我也不确定这是否是正确的方法。

1 个回复
最合适的回答,由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, databasecrappy-data 如果数据库中有这4个单词。所以这使得LIKE 非常不可靠,这就是为什么您应该避免序列化数据

相关推荐

WordPress Custom Post Loop

我正在尝试循环浏览自定义WordPress帖子,遇到了一个问题,比如我添加了自定义字段并想在中显示它<li> 使用循环。我成功地完成了操作,但数据/链接/类别正在重复,如果类别与以下内容相同,我希望只显示一次:如果我有2篇带有data1类别的帖子,那么链接将只显示data1once 但我有2个不同类别的帖子,然后它会分别显示每个帖子。Sample Code:<ul class="filter filter-top"> <li cla