META_QUERY是否需要将数值转换为整数?

时间:2013-12-07 作者:Q Studio

在编辑页面时提取已保存到post\\u meta的数字数据(数字)时-例如:

$number = get_post_meta( $post->ID, \'number\', true ); 
然后在meta\\u查询中将该值与get\\u posts一起使用-例如:

$args = array (
    \'posts_per_page\'    => 4, // limit ##
    \'post_type\'         => \'post\',
    \'post__not_in\'      => array ( $post->ID ), // exclude self ##
    \'meta_query\'        => array (
        array (
            \'key\'       => \'related_page\',
            \'value\'     => $number,
        )
    ),
);

$posts = get_posts( $args );
我们是否首先需要键入juggle将检索到的值变为整数,因为它似乎是作为字符串返回的:

var_dump($args) 提供:

array(5) {
  ["posts_per_page"]=>
  int(4)
  ["post_type"]=>
  string(4) "post"
  ["post__not_in"]=>
  array(1) {
    [0]=>
    int(1387)
  }
  ["meta_query"]=>
  array(3) {
    [0]=>
    array(2) {
      ["key"]=>
      string(15) "related_page"
      ["value"]=>
      string(1) "10"
    }

  }
}
我应该使用其他custom field “比较”或“类型”等设置?

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

中的键和值postmeta table 技术上总是字符串。即使你要stringint 它将被铸造成string 通过查询。尝试:

$args = array (
    \'post_type\'         => \'post\',
    \'meta_query\'        => array (
        array (
            \'key\'       => \'related_page\',
            \'value\'     => 1,
        )
    ),
);

$posts = new WP_Query( $args );
var_dump($posts->request);
你会注意到CAST(wp_postmeta.meta_value AS CHAR) = \'1\') 在该请求中。

您必须使用type 参数获取将值视为数字的查询。即使有\'type\' => \'NUMERIC\' 您会注意到,该值仍被视为字符串,但由查询强制转换--CAST(wp_postmeta.meta_value AS SIGNED) = \'1\').

所有这些都不会真正影响返回的数据。尝试:

update_post_meta(1,\'hal9000\',1);
var_dump(get_post_meta(1,\'hal9000\'));
输入一个整数,返回一个字符串。

PHP对“type”非常宽容,所以在许多情况下,您是否有string 或aint. 我能想到的最重要的情况是分类。或者,可能是这个网站上出现最多的案例。您需要转换为整数--使用type 如果需要查询进行排序,则排序将按字母顺序,而不是数字顺序,它们并不总是对齐的。

SO网友:Otvazhnii

上述答案不正确。以下是在最小值和最大值之间搜索所需的操作:

$query_args[\'meta_query\'][] = array(
  \'key\' => \'your_key_which_is_a_number\',
  \'value\' => array(intval($minimum), intval($maximum)),
  \'compare\' => \'BETWEEN\',
  \'type\' => \'NUMERIC\'
 );
只需按照此示例进行任何其他类型的搜索。

结束

相关推荐

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

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