按发布元值排序可获得随机结果

时间:2015-11-23 作者:Rajitha Bandara

我想按帖子元字段订购自定义帖子类型。此查询部分工作正常并加载结果。问题是每次执行此查询时,结果的顺序都不同。我在最后几页也找到了一些副本。你能帮我弄清楚那里发生了什么事吗?

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts 
INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) 
WHERE 1=1 AND wp_posts.post_type = \'estate_agent\' AND
((wp_posts.post_status = \'publish\')) AND  
(wp_postmeta.meta_key = \'package_id\') 
GROUP BY wp_posts.ID 
ORDER BY wp_postmeta.meta_value+0 DESC LIMIT 0, 10

enter image description here

Updated实际上,我正在使用Wordpress方式运行上述查询。以上是Wordpress调试插件的原始查询输出。我真的很抱歉弄糊涂了。这就是我所尝试的。

$args = array(
                \'post_type\' => \'estate_agent\',
                \'post_status\'     => \'publish\',
                \'meta_key\' => \'package_id\',
                \'orderby\' => \'meta_value_num\',
                \'order\' => \'DESC\',
                \'paged\' => $paged,
                \'posts_per_page\' => 10,
                \'cache_results\' => false,
               );

            $agent_selection = new WP_Query($args);

2 个回复
SO网友:mukto90

既然有我们的抄本,为什么还要使用SQL!

请改用此代码段-

function pre_change_query( $wp_query ) {

        $wp_query->set(\'meta_key\', \'package_id\');
        $wp_query->set(\'orderby\', \'meta_value\');
        $wp_query->set(\'order\', \'DESC\'); // or \'ASC\'

}

add_filter(\'pre_get_posts\', \'pre_change_query\');

$args = array(
    \'post_type\' => \'estate_agent\',
    \'posts_per_page\'    => 10
);

$my_custom_query = new WP_Query( $args );
详情请参见法典:https://codex.wordpress.org/Class_Reference/WP_Query

SO网友:Abhik

当您可以使用核心WordPress功能进行查询时,无需对数据库进行自定义查询,WP_Query. 这会让你开始。您可以根据需要将订单设置为“ASC”或“DESC”。

$agents = new WP_Query( array (
        \'post_type\'      => \'estate_agent\',
        \'meta_key\'       => \'package_id\',
        \'orderby\'        => \'meta_value_num\',
        \'order\'          => \'DESC\'
        \'posts_per_page\' => 10,
    )
);

if ( $agents->have_posts() ) {
    while ( $agents->have_posts() ) {
        $agents->the_post();

        // Do your stuffs for each Agents here, Like:
        printf( esc_html__( \'Package ID: %1$s\', \'textdomain\' ), get_post_meta ( get_the_ID(), \'package_id\', true ) );

    }
} else {

    // No Agents Found

}
wp_reset_postdata();

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在