Как получить список всех пользователей, зарегистрированных до указанной даты?

Я ожидал, что смогу сделать что-то вроде следующего, которое, как я думал, вернет всех пользователей, зарегистрированных до указанной даты:

$args = array( 'post_type' => 'post', 'date_query' => array( array( 'before' => current_time( 'mysql' ) ) ) ); $query = new WP_User_Query( $args ); 

Однако, в отличие от WP_Query , WP_User_Query не поддерживает параметр date_query поэтому приведенный выше код не работает.

Как я могу получить список всех пользователей, зарегистрированных до указанной даты?

Solutions Collecting From Web of "Как получить список всех пользователей, зарегистрированных до указанной даты?"

Метод №1: Крючок pre_user_query :

pre_user_query доступно не так много, но вы можете попробовать pre_user_query :

 // Add filter: add_action( 'pre_user_query', 'wpse_filter_by_reg_date' ); // Query: $query = new WP_User_Query( $args ); // Remove filter: remove_action( 'pre_user_query', 'wpse_filter_by_reg_date' ); 

где обратный вызов фильтра:

 /** * Filter WP_User_Query by user_registered date * * @see http://wordpress.stackexchange.com/a/160826/26350 * @param WP_User_Query The current WP_User_Query instance */ function wpse_filter_by_reg_date( $q ) { global $wpdb; $q->query_where .= $wpdb->prepare( " AND {$wpdb->users}.user_registered >= '%s' ", date( "Ymd" ) ); } 

Затем вы можете изменить обратный вызов фильтра на свои нужды.

Метод №2: WP_User_Query с пользовательскими переменными запроса:

Вы также можете сделать это более динамичным, используя пользовательские параметры строки _registered и _registered_compare . Тогда ваш запрос может быть:

 $args = array( 'orderby' => 'login', 'order' => 'ASC', '_registered' => date( 'Ymd' ), '_registered_compare' => '>=', ); $query = new WP_User_Query( $args ); 

где:

 /** * Add support for the custom '_registered' and '_registered_compare' * string input parameters in WP_User_Query(). * * @see http://wordpress.stackexchange.com/a/160826/26350 * @param WP_User_Query The current WP_User_Query instance */ function wpse_registered_filter( $q ) { if( isset( $q->query_vars['_registered'] ) && isset( $q->query_vars['_registered_compare'] ) && is_string( $q->query_vars['_registered_compare'] ) ) { // Input: $registered = $q->query_vars['_registered']; $compare = $q->query_vars['_registered_compare']; // Init: $available_compares = array( '=', '<', '>', '<=', '>=', '!=' ); // Default compare: if( ! in_array( $compare, $available_compares, TRUE ) ) $compare = '='; // Modify query: global $wpdb; $q->query_where .= $wpdb->prepare( " AND {$wpdb->users}.user_registered {$compare} '%s' ", $registered ); } } add_action( 'pre_user_query', 'wpse_registered_filter' ); 

Метод №3: Ручной SQL:

Отвечая на комментарий ниже, это пример того, как вы можете написать SQL вручную:

  global $wpdb; $sql = $wpdb->prepare( "SELECT ID FROM {$wpdb->users} WHERE {$wpdb->users}.user_registered >= '%s' ", current_time( 'mysql' ) ); $uids = $wpdb->get_col( $sql ); 

Вы можете использовать WP_User_Query для извлечения списка всех идентификаторов пользователя, а затем передать это, чтобы get_userdata извлекал дату регистрации пользователя.

Затем вы можете сортировать и исключать пользователей из этого в соответствии с конкретной датой и временем.

Вот моя идея

 <?php $user_query = new WP_User_Query( array( 'fields' => 'ID', ) ); $users = $user_query->get_results(); foreach( $users as $user ) { $user_object = get_userdata( $user ); $cutoffdate = '2013-07-01 00:00:01'; if( $user_object->user_registered < $cutoffdate ) { echo '<p>' . $user_object->display_name; echo '</br>'; echo $user_object->user_registered . '</p>'; } } ?>