如何根据对应于meta_value(这是用户ID)的USER_LOGIN对帖子进行排序?

时间:2014-09-15 作者:joshee

我正在尝试为CPT列表创建可排序的列标题,但我只限于一个部分。单击“Assignee”列标题时,我希望列表按用户登录名的字母顺序显示。

中的以下内容pre_get_posts 按用户ID排序(通过高级自定义字段保存为meta\\u值):

$query->set(\'meta_key\', \'assignee\' );
$query->set(\'orderby\', \'meta_value\' );
但是,我想订购的不是ID,而是它对应的user\\u登录名。

我已经成功地使用了本文中的代码(http://scribu.net/wordpress/sortable-taxonomy-columns.html) 对于分类排序(在不同的列中),但我不知道如何将相同的技术应用于用户表。

我在posts_orderby 过滤器,但我离得太远了。

SELECT GROUP_CONCAT(user_login ORDER BY user_login ASC)
        FROM $wpdb->users
        INNER JOIN $wpdb->postmeta ON $wpdb->postmeta.meta_value = ID
        INNER JOIN $wpdb->posts ON $wpdb->postmeta.post_id = $wpdb->posts.ID
        WHERE $wpdb->postmeta.meta_key = \'assignee\'
        GROUP BY user_login
我真的很感谢你的帮助!

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

好的,解决了这个问题。我必须使用posts_clauses过滤器和以下代码:

function assigned_to_orderby( $clauses, $wp_query ) {
    global $wpdb;

    $clauses[\'join\'] .= "
    LEFT OUTER JOIN {$wpdb->postmeta} ON {$wpdb->posts}.ID={$wpdb->postmeta}.post_id
    LEFT OUTER JOIN {$wpdb->users} ON {$wpdb->users}.ID={$wpdb->postmeta}.meta_value
    ";

    $clauses[\'where\'] .= " AND ({$wpdb->postmeta}.meta_key = \'assignee\')";
    $clauses[\'groupby\'] = "{$wpdb->postmeta}.post_id";
    $clauses[\'orderby\']  = "GROUP_CONCAT({$wpdb->users}.user_login ORDER BY {$wpdb->users}.user_login ASC) ";
    $clauses[\'orderby\'] .= ( \'DESC\' == strtoupper( $_GET[\'order\'] ) ) ? \'DESC\' : \'ASC\';

    return $clauses;
}
改编自http://scribu.net/wordpress/sortable-taxonomy-columns.html

结束

相关推荐

通过终端更改SQL文件中的WordPress URL

我有一个40mb的数据库文件,是从旧主机导出的,需要将其导入新域上的新主机。我通常在代码编辑器中打开数据库并找到replace,但由于这个文件太大,它冻结了我的编辑器。是否有办法通过终端/命令行执行此操作?我看到了一些关于使用sed 搜索时,但我无法了解它是如何工作的。是否已有一个简单的命令来执行此操作?我试过这个,但不起作用:sed \'s/http:\\/\\/www.domain.com/http:\\/\\/www.newdomain.com/g\' mydatabase.sql 谢谢你