Skip to content

WP_User_Query capability support (WordPress 5.9) #63

Open
@cbratschi

Description

@cbratschi

Is your enhancement related to a problem? Please describe.

The following query introduced in WordPress 5.9 runs extremely slow on our system (4-8 seconds):

SELECT wp_users.ID,wp_users.user_login,wp_users.display_name
FROM wp_users
INNER JOIN wp_usermeta
ON ( wp_users.ID = wp_usermeta.user_id )
WHERE 1=1
AND ( ( ( ( wp_usermeta.meta_key = 'wp_capabilities'
AND wp_usermeta.meta_value LIKE '%\"edit\\_posts\"%' )
OR ( wp_usermeta.meta_key = 'wp_capabilities'
AND wp_usermeta.meta_value LIKE '%\"administrator\"%' )
OR ( wp_usermeta.meta_key = 'wp_capabilities'
AND wp_usermeta.meta_value LIKE '%\"editor\"%' )
OR ( wp_usermeta.meta_key = 'wp_capabilities'
AND wp_usermeta.meta_value LIKE '%\"author\"%' )
OR ( wp_usermeta.meta_key = 'wp_capabilities'
AND wp_usermeta.meta_value LIKE '%\"contributor\"%' )
OR ( wp_usermeta.meta_key = 'wp_capabilities'
AND wp_usermeta.meta_value LIKE '%\"wpseo\\_manager\"%' )
OR ( wp_usermeta.meta_key = 'wp_capabilities'
AND wp_usermeta.meta_value LIKE '%\"wpseo\\_editor\"%' ) ) ) )
ORDER BY display_name ASC

This is executed by the quick edit code and runs while dispalys the posts or pages admin screens. Responsible is wp_dropdown_users().

Therefore we tried to use ElasticPress to speed up this call:

/**
 * Use ElasticPress for very slow user queries (takes 4 - 8 seconds on prod!).
 */
add_filter('wp_dropdown_users_args', function ($query_args, $r) {
    //enable ElasticPress
    $query_args['ep_integrate'] = true;

    return $query_args;
}, 10, 2);

However, this is not yet supported for the new features introduced in WordPress 5.9.

Describe the solution you'd like

Support the capability fields:

  • capability
  • capability__in
  • capability__not_in

More details are listed here:

https://make.wordpress.org/core/2022/01/05/new-capability-queries-in-wordpress-5-9/

Designs

Describe alternatives you've considered

Additional context

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions