¿Cómo puedo buscar un usuario de worpress por nombre para mostrar o parte de él?

13

Necesito crear una página de búsqueda que muestre todo lo relacionado con la búsqueda proporcionada. es decir, commentsque lo contiene, events, posts, CPTS y userscon ese nombre.

¿Cómo puedo buscar usuarios en el sitio cuyo nombre o apellido contenga la frase de búsqueda?

Hannit Cohen
fuente

Respuestas:

24

Buscando en la mesa principal

Simplemente utilícelo WP_User_Querycon un argumento de búsqueda.

Entonces, si desea buscar, por ejemplo, un usuario con una palabra clave en su user_emailcolumna o columnas similares de la {$wpdb->prefix}userstabla, puede hacer lo siguiente:

$users = new WP_User_Query( array(
    'search'         => '*'.esc_attr( $your_search_string ).'*',
    'search_columns' => array(
        'user_login',
        'user_nicename',
        'user_email',
        'user_url',
    ),
) );
$users_found = $users->get_results();

Tenga en cuenta que *es un comodín. Así, por ejemplo, restringiendo el user_emailque un único dominio le daría la siguiente cadena de búsqueda: *@example.com.

La searchcadena tiene algunas características "mágicas": los search_columnsvalores predeterminados para ...

  • user_emailsi @está presente en el searchargumento
  • user_loginy IDsi el searchargumento es numérico
  • user_urlsi la searchcadena contiene http://ohttps://
  • o ... user_loginy user_nicenamesi hay una cadena presente.

Todos esos valores predeterminados solo se establecen si no search_columns se especificó ningún argumento.

Buscando en la metatabla

Si desea buscar por ejemplo first_nameo last_name, entonces tendrá que hacer una, meta_queryya que no son parte de la tabla principal:

$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'first_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        ),
        array(
            'key'     => 'last_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        )
    )
) );
$users_found = $users->get_results();

Asegúrese de recuperar la cadena de búsqueda correcta. Normalmente eso sería get_query_var('s');, pero podría, dependiendo de su forma name/id, también podría ser algo diferente que podría querer recuperar usando, $_GET['user_search']por ejemplo. Asegúrese de cerrarlo correctamente y eliminar el espacio en blanco no deseado desde el principio y el final de la cadena.

Tenga en cuenta que esta es una array( array() )que está la relationclave. Si solo desea que se busque una sola clave, puede ser más fácil simplemente ir con lo siguiente:

$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
    'meta_key'     => 'first_name',
    'meta_value'   => $search_string,
    'meta_compare' => 'LIKE',
) );
$users_found = $users->get_results();

Consulta final

El resultado podría parecerse al siguiente:

$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
    'search'         => "*{$search_string}*",
    'search_columns' => array(
        'user_login',
        'user_nicename',
        'user_email',
        'user_url',
    ),
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'first_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        ),
        array(
            'key'     => 'last_name',
            'value'   => $search_string,
            'compare' => 'LIKE'
        )
    )
) );
$users_found = $users->get_results();
emperador
fuente
¿En qué archivo quiero agregar esta consulta?
Naveen
@Naveen Best fit sería functions.phpsu plantilla o (lo que sería mejor) bien envuelto en un mini plugin personalizado para no perder la funcionalidad al cambiar de tema.
kaiser
Kiaser gracias por tu respuesta. ayúdenme, ¿cómo puedo integrar este código a functions.php?
Naveen
3
@Naveen Eso está fuera de alcance aquí. Tendrá que aprender un poco sobre el código o buscar un desarrollador que lo haga por usted. Y leído que Q / A .
kaiser
display_namees una columna en wp_users. Dos preguntas me vienen a la mente. 1: ¿Es este un cambio reciente en el esquema de la base de datos? 2: ¿Se puede usar como un valor en search_columnslugar de la metaconsulta?
henrywright