查询帖子并在查询时按自定义元的值进行筛选

时间:2012-02-28 作者:JamesG

我有一个自定义帖子类型的wordpress查询,但我想根据自定义meta的值过滤结果。

    <?php $my_query = new WP_Query(\'post_type=prizes&showposts=3&orderby=rand\');
while ($my_query->have_posts()) : $my_query->the_post(); 
$do_not_duplicate = $post->ID; $my_meta = get_post_meta($post->ID,\'_my_meta\',TRUE); ?>

<?php if(($calctotalnew - number_format($cart->total,2)) >= $my_meta[\'pointsvalue\']){ ?>

    <div class="footerprizecontainer">
        <a href="<?php the_permalink();?>"><span class="footerprizetitle"><?php the_title();?></span></a>

        <div class="footerprizevalue">
            <h2><?php echo $my_meta[\'pointsvalue\'];?></h2>
        </div>

        <div align="center">
            <a href="<?php the_permalink();?>"><?php the_post_thumbnail(\'thumb\');?></a>
        </div>

    </div>

<?php } 
这是我的密码。基本上,循环中的IF语句会过滤结果,但我需要它们在查询时进行过滤,因为它并不总是显示3篇文章(因为有些文章的值会高于IF语句中过滤的IF值)。

有什么想法吗?

谢谢

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

这非常容易处理meta_querys:

$args = array(
    //basics
    \'post_type\'      => \'prizes\',   // from question
    \'post_status\'    => \'publish\',  // you didn\'t have this, but it\'s good practice
    \'posts_per_page\' => 3,           // I don\'t know where you got \'showposts\', but that\'s WAY old

    //order
    \'orderby\'        => \'rand\',

    //meta query
    \'meta_query\'     => array(
        array(
            \'key\'     => $my_meta[\'pointsvalue\'],
            \'value\'   => ( $calctotalnew - number_format( $cart->total, 2 ) ),
            \'compare\' => \'<=\',
            \'type\'    => \'NUMERIC\'
        )
    )
);

$my_query = new WP_Query( $args );
此外,您的$do_not_duplicate 完全没有感觉。这是设置,但从未调用,您可能想解决这个问题。

我为你填写了一些细节,它们可能不对。这个documentation on WP_Query 将帮助您纠正一切错误。

结束

相关推荐

Trim posts from WP-Query?

我希望在我的首页上显示一些由以下标准确定的帖子:显示当月的所有帖子(实际上是从最近帖子对应的月份开始);但是如果这个数字少于(比如)8,那么就显示最近的8篇帖子。假设我知道每个月都不会有超过(比如)20篇文章,我会将posts\\u per\\u page设置为20,通常抓取最近的20篇文章,然后在php中进行适当的修剪(切片)。(在SQL中这样做似乎太复杂了)顺便说一句:起初我以为add_filter( \'posts_results\', ... ) 这很合适,但很难区分查询是与主循环相对应,还是与其