我正在为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";
非常感谢任何帮助/建议!
答案 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和字段数组,并获得一个多维数组就会很好...但我想这种方式现在有效,它只是有点麻烦。