Intereting Posts

Расширить WP_User_Query или WP_User, чтобы вернуть все пользовательские поля?

Я пытаюсь вывести список из 5000+ записей участников для экспорта CSV. Запрос тайм-аут, и я полагаю, причина в том, что для заполнения CSV-файла мне нужно перебрать эти 5000 записей и вытащить пользовательскую мета для каждого пользователя отдельно.

Можно ли расширить или переопределить WP_User_Query или WP_User, чтобы вернуть все пользовательские мета в одном запросе?

В основном мне нужно избавиться от вызова get_user_meta ($ user-> ID) для каждой записи отдельно и получить все мета в одном результирующем наборе.

Спасибо за помощь! 🙂

В таких случаях лучше (IHMO) просто использовать пользовательский запрос, используя $wpdb class

например:

 <?php global $wpdb; //first get a list of all meta keys $keys = $wpdb->get_col("SELECT distinct meta_key FROM $wpdb->usermeta"); //then prepare the meta keys query as fields which we'll join to the user table fields $meta_columns = ''; foreach ($keys as $key) { $meta_columns .= " MAX(CASE WHEN um1.meta_key = '$key' THEN um1.meta_value ELSE NULL END) AS ".str_replace('-','_',$key).", \n"; } //then write the main query with all of the regular fields and use a simple left join on user users.ID and usermeta.user_id $query = " SELECT u.ID, u.user_login, u.user_pass, u.user_nicename, u.user_email, u.user_url, u.user_registered, u.user_activation_key, u.user_status, u.display_name, ".rtrim($meta_columns,", \n") ." FROM $wpdb->users u LEFT JOIN $wpdb->usermeta um1 ON (um1.user_id = u.ID) GROUP BY u.ID"; $users = $wpdb->get_results($query,ARRAY_A); var_dump($users); 

имейте в виду, что это пример, который вы можете использовать, например, для фильтрации нежелательных пользователей и мета-ключей.