基于比较的查询帖子

时间:2014-02-17 作者:Ezhil

我网站上的每个帖子都可以被评为“好”、“好”、“坏”。这些值存储在自定义字段中。我现在需要显示最大值为“好”的前10个帖子,而不应该显示值为“好”或“坏”的帖子。

我目前通过以下代码执行此操作

<?php
$orig_post = $post;
global $post;
$args=array(
\'post__not_in\' => array(get_the_ID()),
\'posts_per_page\'=>10, // Number of related posts to display.
\'meta_key\'=>\'good\',
\'orderby\'=>\'meta_value_num\',
\'caller_get_posts\'=>1
);

$my_query = new wp_query( $args );

while( $my_query->have_posts() ) {
$my_query->the_post();

//code for filtering posts based on max good 

$good_val = get_post_meta(get_the_ID(),\'good\',true);
$ok_val = get_post_meta(get_the_ID(),\'ok\',true);
$bad_val = get_post_meta(get_the_ID(),\'bad\',true);

$maxValue=max($good_val,$ok_val,$bad_val);


if ($maxValue == $good_val)
{the_title();}}

$post = $orig_post;
wp_reset_query();
?>
上面的代码在查询后过滤帖子,这有时会导致不正确的结果。不管怎样,我们都可以在中进行筛选(即比较3个值)wp_query 它本身

1 个回复
SO网友:s_ha_dum

我们是否可以在wp\\U查询本身中进行筛选(即比较3个值)?

在纯SQL中,您的问题很棘手,尽管它是可以做到的。WP_Query 但是,无法以本机方式处理逻辑。您必须创建一个或多个过滤器。

不过,使用您现在拥有的数据结构执行此操作不会特别有效。最好的答案已经在一条评论中提出了——更改数据结构,以便将评级保存到单个键,例如my_gob_rating. 然后,您可以使用meta_query. 像这样:

$args=array(
  \'post__not_in\' => array(get_the_ID()),
  \'posts_per_page\' => 10, // Number of related posts to display.
  \'meta_query\' = array(
    array(
      \'key\' => \'my_gob_rating\',
      \'value\' => 10, // whatever the cutoff is between \'ok\' and \'good\'
      \'compare\' => \'>=\',
    )
  ),
  \'ignore_sticky_posts\' => true
);
您可以更改compare 操作员至BETWEEN 获取“确定”数据,并< 如果需要,获取“坏”值。

而且

ignore_sticky_posts (布尔)-是否忽略粘性帖子(3.1版可用,replaced caller_get_posts parameter). 默认值为0-不要忽略粘性帖子。注意:忽略/排除返回的帖子开头包含的粘性帖子,但粘性帖子仍将按照返回帖子列表的自然顺序返回。

http://codex.wordpress.org/Class_Reference/WP_Query

结束