WordPress get_user_meta() - 是否有更好的方法来提取批量用户数据?

时间:2014-12-18 19:58:50

标签: php mysql wordpress

我正在为WordPress网站制作成员数据的自定义报告。我需要在报告中包含的一些字段存储在wp_usermeta表中,但是当我遍历每个成员以检索该数据时,它最终会超时。

我目前正在使用get_user_meta(),因为它似乎比手动执行查询更快,但它仍然超时。有大约5,600个用户要处理。它通过其中4000个很好,但如果我尝试在全套上运行它,它不可避免地会超时。有一个更好的方法吗?有没有办法从wp_usermeta表中提取批量数据,而不是为每个用户单独执行?我想过可能尝试在一个查询中下拉整个usermeta表并使用PHP来操作它,但该表中有超过540,000行......

这是我到目前为止的地方......

 require_once( "db_connection.php" );
 require_once( "../wp-config.php" );
 $q = "SELECT ID,user_login,user_email,last_login,display_name FROM wp_users WHERE user_email='' ORDER BY user_login ASC;";
 $r = mysql_query( $q );
 $members = array();
 while ( $member = mysql_fetch_array( $r ) ) {
      $usermeta = get_user_meta($member['ID']);
      $members[$member['ID']] = $member;
      $members[$member['ID']]['meta'] = $usermeta;
      }

 echo "<pre>\n";
 var_dump( $members );
 echo "</pre>\n";

非常感谢任何帮助/建议!

1 个答案:

答案 0 :(得分:0)

好吧,我尝试了#34;拉下所有东西&#34;方法,它似乎没有超时工作。这是我修改过的方法:

 require_once( "db_connection.php" );
 require_once( "../wp-config.php" );
 $q = "SELECT ID,user_login,last_login,display_name FROM wp_users WHERE user_email='' ORDER BY user_login ASC;";
 $r = mysql_query( $q );
 $members = array();
 while ( $member = mysql_fetch_array( $r ) ) {
      $members[$member['ID']] = $member;
      }

 $q = "SELECT * FROM wp_usermeta WHERE (meta_key='first_name' OR meta_key='_slt_middle_initial' OR meta_key='last_name' OR meta_key='_slt_email2' OR meta_key='_slt_email3');";
 $r = mysql_query($q);
 while ( $usermeta = mysql_fetch_array( $r ) ) {
      if ( $members[$usermeta['user_id']]['ID'] != "" ) {
           $members[$usermeta['user_id']][$usermeta['meta_key']] = $usermeta['meta_value'];
           }
      }

 echo "<pre>\n";
 var_dump( $members );
 echo "</pre>\n";

太糟糕了get_user_meta()对批量数据不起作用 - 例如,如果我们可以传递一个我们想要的ID和字段数组,并获得一个多维数组就会很好...但我想这种方式现在有效,它只是有点麻烦。