用于获取不起作用的最大价格元值的新WP_QUERY

时间:2016-05-06 作者:Joel M

因此,我试图获得所有“属性”(自定义帖子类型)的最高价格。

$max_price_query = new WP_query(array(
    \'posts_per_page\' => -1,
    \'post_status\' => \'publish\',
    \'post_type\' => \'properties\',
    \'nopaging\' => true,
    \'orderby\' => \'meta_value_num\',
    \'meta_key\' => \'_price\',
    \'order\' => \'DESC\',
));

if ($max_price_query->have_posts()) {
    while ($max_price_query->have_posts()) : $max_price_query->the_post();
        $pid = $post->ID;
        $price_max = get_post_meta($pid, \'_price\', true);
        echo \'<pre>\' . $pid . \'</pre>\';
    endwhile;
    wp_reset_postdata();
}
第一个问题是,它们是按ID订购的,而不是按价格订购的。这些属性称为属性1、属性2等,因此在本例中,按ID排序==按标题排序==按日期排序。

第二个问题是,在按ID排序之前,它们实际上是由另一个名为\\u featured\\u prop的meta\\u值(0或1)排序的。这是因为,我还有以下几点:

 function set_query_parameters($query) {
    if( !is_admin() &&  is_main_query() && is_post_type_archive( \'properties\' ) ) {
        $query->set(\'meta_key\', \'_featured_prop\');
        return $query;
    }
      add_action( \'pre_get_posts\', \'set_query_parameters\' );
我不明白为什么这个pre\\u get\\u posts似乎会影响我的新WP\\u查询,因为我在if语句中指定了“is\\u main\\u Query()”。我认为这不会影响我的第二个\\u查询。

当我回想起ID时,我基本上得到了:26、24、20、27、25、23、22、21、19。其中,26、24和20具有\\u characterized\\u prop=1。

如果有什么不同,第一个代码段将在侧栏中调用。正在调用到存档属性中的php文件。php。在其他地方,在第二个代码段中的函数文件中,我正在调用函数(因为在启动pre\\u get\\u posts之后,在加载归档页面之前,您不能执行pre\\u get\\u posts的add\\u操作)。

有人能帮我一下吗?

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

@Milo 建议并由食品法典委员会记录is_main_query Under_the_Hood

此函数是该方法的别名WP_Query::is_main_query(). 在筛选器或操作挂钩回调中传递WP_Query 对象,例如pre_get_posts, 调用此函数是循环的。相反,直接调用传递的对象的方法。例如,如果您的筛选器回调分配了传递的WP_Query 反对$query, 您可以这样调用该方法:$query->is_main_query()

如果传导到

function set_query_parameters($query) {
    if( !is_admin() &&  $query->is_main_query() && is_post_type_archive( \'properties\' ) ) {
        $query->set(\'meta_key\', \'_featured_prop\');
    }
}
add_action( \'pre_get_posts\', \'set_query_parameters\' );
无需返回查询。我真的很想知道为什么你没有收到通知,因为WordPress也会触发_doing_it_wrong() 使用时is_main_query() 就这样!

相关推荐

如何在wp-Query中比较不同的时间戳以获取事件自定义帖子类型?

我有一个带有自定义元数据库的自定义帖子类型(as seen on wptheming.com) 并且希望进行查询以显示即将发生的事件,例如在侧边栏中,过去的日期被忽略。但我需要一个当前时间的值来和事件开始时间进行比较。现在我从current_time(\'mysql\') 看起来是这样的:2012-02-16 13:15:31元的开始时间如下所示:201108121100如何使这两个日期具有可比性?我可以在查询中执行吗?或者是否有其他解决方案?以下是我到目前为止的查询(值留空,时间戳回显):<?ph