users - Wpdb->last_query returns bad query

admin2025-01-07  3

I use Wordpress 4.8 and I want to get users by meta values. I want users not connected since 7 days, and with 'email_not_logged' meta empty.

So I tried :

$users = get_users(array(
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'meta_key' => 'last_login',
            //'meta_value' => 'DATE_SUB(NOW(),INTERVAL 7 DAY)',
            'meta_value' =>  date('Y-m-d H:i', strtotime('-7 days')),
            'meta_compare' => '<=',
            'type' => 'DATE',
        ),
        array(
            'meta_key' => 'email_not_logged',
            'meta_compare' => 'NOT EXISTS',
        )
    ))
);
global $wpdb;
echo "<pre>";
print_r($wpdb->last_query);
echo "</pre>";

I don't know why but I get :

SELECT user_id, meta_key, meta_value FROM ma_usermeta WHERE user_id IN (82) ORDER BY umeta_id ASC

How can I have the good query to test it ?

But, this works :

$users = get_users(
    array(
        'meta_key' => 'last_login',
        //'meta_value' => 'DATE_SUB(NOW(),INTERVAL 7 DAY)',
        'meta_value' =>  date('Y-m-d H:i:s', strtotime('-7 days')),
        'meta_compare' => '<=',
        'type' => 'DATE',
    )
);

Do I use badly meta_query ?

I use Wordpress 4.8 and I want to get users by meta values. I want users not connected since 7 days, and with 'email_not_logged' meta empty.

So I tried :

$users = get_users(array(
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'meta_key' => 'last_login',
            //'meta_value' => 'DATE_SUB(NOW(),INTERVAL 7 DAY)',
            'meta_value' =>  date('Y-m-d H:i', strtotime('-7 days')),
            'meta_compare' => '<=',
            'type' => 'DATE',
        ),
        array(
            'meta_key' => 'email_not_logged',
            'meta_compare' => 'NOT EXISTS',
        )
    ))
);
global $wpdb;
echo "<pre>";
print_r($wpdb->last_query);
echo "</pre>";

I don't know why but I get :

SELECT user_id, meta_key, meta_value FROM ma_usermeta WHERE user_id IN (82) ORDER BY umeta_id ASC

How can I have the good query to test it ?

But, this works :

$users = get_users(
    array(
        'meta_key' => 'last_login',
        //'meta_value' => 'DATE_SUB(NOW(),INTERVAL 7 DAY)',
        'meta_value' =>  date('Y-m-d H:i:s', strtotime('-7 days')),
        'meta_compare' => '<=',
        'type' => 'DATE',
    )
);

Do I use badly meta_query ?

Share Improve this question edited Nov 25, 2017 at 8:45 Vincent Decaux asked Nov 25, 2017 at 8:22 Vincent DecauxVincent Decaux 2252 silver badges12 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

get_users() is a convenience wrapper around WP_User_Query. Maybe you can use that directly, e.g.

$user_search = new WP_User_Query(
    array(
        'meta_query' => array(
            'relation' => 'AND',
            array(
            'meta_key' => 'last_login',
                //'meta_value' => 'DATE_SUB(NOW(),INTERVAL 7 DAY)',
                'meta_value' =>  date('Y-m-d H:i', strtotime('-7 days')),
                'meta_compare' => '<=',
                'type' => 'DATE',
            ),
            array(
                'meta_key' => 'email_not_logged',
                'meta_compare' => 'NOT EXISTS',
            )
        )
    )
);

And then look at the SQL it generates by printing $user_search->request?

转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1736254787a233.html

最新回复(0)