使用元键和元值查询不返回任何内容的帖子

时间:2015-11-30 作者:mizuki

我试图创建一个查询,返回具有特定元值的页面。

仅使用meta_key 行得通,但我两者都用的时候就行不通了meta_keymeta_value.

我知道meta_value 是正确的-我已经重复检查了好几次。我正在使用自定义字段插件,我尝试了名称、值,甚至复制粘贴值。。。所以这不可能只是我使用了错误的值。

非常感谢您的帮助!

我的问题是:

$skolor_query = new WP_Query(array(
\'post_type\' => \'page\',
\'meta_key\' => \'program_skola\',
\'meta_value\' => \'es\'
));

if ($skolor_query->have_posts()) { 
        ?>

    <ul>
        <?php while ( $skolor_query->have_posts() ) : $skolor_query->the_post();            

            $skola = get_the_title();

            ?>
            <li><?php echo $skola; ?></li>

            <?php endwhile;
                } 
             ?>

        </ul>
这是自定义字段:Custom field

$q = new WP_Query( $args );
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();

    ?><pre><?php var_dump( get_post_meta( get_the_ID(), \'program_skola\' ) ); ?></pre><?php

}
wp_reset_postdata();
}
返回值:

array (size=1)
  0 => 
array (size=2)
  0 => string \'sp\' (length=2)
  1 => string \'tp\' (length=2)

array (size=1)
  0 => 
array (size=3)
  0 => string \'ek\' (length=2)
  1 => string \'es\' (length=2)
  2 => string \'nv\' (length=2)

array (size=1)
  0 => 
array (size=5)
  0 => string \'ek\' (length=2)
  1 => string \'es\' (length=2)
  2 => string \'nv\' (length=2)
  3 => string \'sp\' (length=2)
  4 => string \'tp\' (length=2)

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

我仍然不确定自定义字段中的值是如何保存到db中的,但db中的格式与查询的格式不匹配meta_value. 从您的图像来看,您似乎正在一个自定义字段下保存5个值,或以es: xxxxxx 这永远不会匹配es 明确地

要对此进行调试,或者真正确定值的存储方式,请运行以下查询并记录自定义字段的输出。你应该从那里开始

$args = [
    \'post_type\' => \'page\',
    \'meta_key\'  => \'program_skola\'
];
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
    $q->the_post();

        ?><pre><?php var_dump( get_post_meta( get_the_ID(), \'program_skola\' ) ); ?></pre><?php

    }
    wp_reset_postdata();
}
从您的var_dump() 从…起get_post_meta():

array (size=5)
  0 => string \'ek\' (length=2)
  1 => string \'es\' (length=2)
  2 => string \'nv\' (length=2)
  3 => string \'sp\' (length=2)
  4 => string \'tp\' (length=2)
这是存储为自定义字段单个值的值数组。遗憾的是,当您需要自定义字段数据进行排序或搜索功能时,您不能使用序列化数据(存储为数组的值在存储之前序列化),因为它永远不会工作(如您所见)。一般来说,为了在将来的方法中不会出现问题,应使用自定义字段仅存储一个值,以便进行搜索和排序

您应该为每个值创建一个自定义字段,然后使用如下值01 作为触发器。例如,一篇文章可以有一个字段es 值为0no 或值1yes. 其他自定义字段将为ek, nv 等,每个字段都有描述的值。如果需要使用自定义字段查询帖子es 标记为1这意味着,据我所知,这门课程是必需的),您可以如下查询

$args = [
    \'post_type\'  => \'page\',
    \'meta_key\'   => \'es\',
    \'meta_value\' => 1
];
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
    $q->the_post();

        the_title();

    }
    wp_reset_postdata();
}
至于您当前的设置,我唯一能快速想到的是以下内容

$args = [
    \'post_type\' => \'page\',
    \'meta_key\'  => \'program_skola\'
];
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
    $q->the_post();

        $meta = get_post_meta( get_the_ID(), \'program_skola\' ) ); 
        if ( in_array( \'es\', $meta ) ) {

            // Display posts with value \'es\'
            the_title();

         }

    }
    wp_reset_postdata();
}
应该注意的是,这对性能不是很好,因为您正在查询不需要的帖子,这会浪费时间和db调用

相关推荐

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

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