Skip to content

WP_User_Query capability support (WordPress 5.9) #63

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions