【问题标题】:WP_Query order by usermeta valueWP_Query 按 usermeta 值排序
【发布时间】:2016-11-15 09:09:51
【问题描述】:

我有一个工作正常的 WP_Query,但是我现在需要修改它以按来自 usermeta 的值排序(在这种情况下,用户的 meta_key 为“jobs_order”)。这是一个数值,我的想法是我根据这个来订购帖子,例如值为 0 的用户将在下一个拥有 1 的用户之前看到他们的帖子。

我是这样沉迷其中的:

add_filter('posts_join', 'wpa_66507_join');

function wpa_66507_join( $join ) {
    if ( is_page('browse-jobs') && is_main_query() )  {

        global $wpdb;

        // join the usermeta table so we can sort by meta key
        $join .= " LEFT JOIN {$wpdb->usermeta} AS um ON ( um.user_id = {$wpdb->posts}.post_author AND um.meta_key = 'jobs_order' )";
    }
    return $join;
}

WP_Query 设置为 orderby um.meta_value_num ASC。但是,这不起作用,无论我是否注释掉加入声明,帖子都保持相同的顺序。非常感谢您对此的任何想法。

【问题讨论】:

  • 您好,据我了解,您必须进行帖子排序,对吗?
  • 嗨,没错

标签: wordpress left-join


【解决方案1】:
$args = array(
    'post_type'  => 'my_custom_post_type',
    'meta_key'   => 'age',
    'orderby'    => 'meta_value_num',
    'order'      => 'ASC',
    'meta_query' => array(
        array(
            'key'     => 'age',
            'value'   => array( 3, 4 ),
            'compare' => 'IN',
        ),
    ),
);
$query = new WP_Query( $args );

【讨论】:

  • 我可以很好地订购帖子,我发布的问题是按作者/用户的元值订购
  • 你当前的输出是多少?
  • 好的,尽管 $args 的 orderby 设置为 um.met_value,但它是按 post_date 排序的
猜你喜欢
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
相关资源
最近更新 更多