我网站上的每个帖子都可以被评为“好”、“好”、“坏”。这些值存储在自定义字段中。我现在需要显示最大值为“好”的前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
它本身
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