私は次のようなことができると期待していました。与えられた日付より前に登録したすべてのユーザーを返すと私は考えました。
$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
パラメータをサポートしていないため、上記のコードは機能しません。
特定の日付より前に登録されたすべてのユーザーのリストを取得する方法を教えてください。
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( "Y-m-d" )
);
}
その後、必要に応じてフィルタコールバックを修正できます。
WP_User_Query
:カスタム文字列パラメータ_registered
および_registered_compare
を使用して、これをより動的にすることもできます。それならあなたの質問は次のようになるでしょう。
$args = array(
'orderby' => 'login',
'order' => 'ASC',
'_registered' => date( 'Y-m-d' ),
'_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' );
以下のコメントに対応して、これは手動で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
を使用してすべてのユーザーのIDのリストを取得し、それを 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>';
}
}
?>