WP用户查询获取姓氏以特定字母开头的所有作者

时间:2015-08-14 作者:Juan Fuentes

我需要编程一个页面,我通过url传递首字母,它将显示所有姓氏以该字母开头的作者用户。我想通过WP用户查询来实现这一点,以便我可以轻松地循环结果

现在我有这个:

<?php $letter = $_GET[\'p\'] ?>
<?php
  $sql = "SELECT umfirst.meta_value AS first_name, umlast.meta_value AS last_name
          FROM $wpdb->usermeta umfirst, $wpdb->usermeta umlast, $wpdb->users user
          WHERE umlast.meta_key = \'last_name\'
          AND umfirst.meta_key = \'first_name\'
          AND umfirst.user_id = umlast.user_id
          AND user.id = umfirst.user_id
          AND umlast.meta_value LIKE \'".$letter."%\'";

  $rows = $wpdb->get_results($sql);
  foreach ($rows as $row) {
    // Do stuff with the results
  }
?>
然而,我更喜欢使用WP-Query,因为添加其他约束更容易,但我无法将此约束用于WP-Queryumlast.meta_value LIKE \'".$letter."%\'"

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

问题是您不能使用LIKE 如你所述的比较。生成的SQL 将沿着以下路线查看:

AND CAST(wp_usermeta.meta_value AS CHAR) LIKE \'%B%\'
这意味着查询设置为查找每个字母B 在我们的情况下。当然这不是你想要的,你需要的是这样的东西:

AND CAST(wp_usermeta.meta_value AS CHAR) LIKE \'B%\'
以便只进行搜索starting with 这个B

好消息是,你仍然可以实现你所需要的,但代价是看起来有点像黑客

这个WP_User_Query:

$args = array(
    \'meta_key\'      => \'last_name\',
    \'meta_value\'    => \'B########\', // The \'########\' sequence acts sort of like an unique identifier
    \'meta_compare\'  => \'LIKE\',
);

$wt_user_query = new WP_User_Query( $args );
并且在functions.php 我们在get_meta_sql 过滤并更改WHERE 条款:

function wt_custom_meta_sql( $sql ) {
    /* 
        Search for that funky so called unique identifier
        that we used to initialize our `WP_User_Query\' object    
    */
    $uid = \'########\';
    preg_match( "/\'(%[^\']+{$uid}%)\'/", $sql[\'where\'], $matches );

    if ( ! empty( $matches ) ) {
        /* 
            We\'ve found it and now we get rid of the
            extra \'%\' character as well as our identifier               
        */
        $val = str_replace( "{$uid}%", "%", ltrim( $matches[1], \'%\' ) );
        $sql[\'where\'] = str_replace( $matches[0], "\'{$val}\'", $sql[\'where\'] );
    }

    return $sql;
}
add_filter( \'get_meta_sql\' , \'wt_custom_meta_sql\', 40 );

结束

相关推荐

克隆像users.php这样的管理页面

在我的项目中,我想创建一个新的菜单位置,它实际上是“用户”页面的副本,但需要一些额外的过滤器/修改。例如,我需要在用户上方有另一个名为“Admins”的菜单位置,它将显示完全相同的结构化页面,但只有Admin用户。这是为了给我的客户带来更好/更简单的用户体验。我的问题是如何做到这一点?我知道有些函数add_menu_page 但是像这样使用它们(users.php 作为标识符):add_menu_page( \'custom menu title\', \'custom menu\', \'users.p