표시 이름이나 그 일부로 Worpress 사용자를 검색하려면 어떻게해야합니까?


13

제공된 검색과 관련된 내용을 표시하는 검색 페이지를 만들어야합니다. 예 comments를 들어, events, posts, CPT및 S users해당 이름.

사이트에서 성이나 이름이 포함 된 사용자를 검색하려면 어떻게해야합니까?

답변:


24

메인 테이블 검색

WP_User_Query검색 인수와 함께 사용하십시오 .

예를 들어 user_email, {$wpdb->prefix}users표 에서 유사하거나 비슷한 열에 키워드가있는 사용자를 검색 하려면 다음을 수행하십시오.

$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();

*와일드 카드 임을 명심하십시오 . 예를 들어 user_email를 단일 도메인으로 제한 하면 다음과 같은 검색 문자열이 제공 *@example.com됩니다.

search문자열은 약간의 "마법"기능이 다음 search_columns기본값을 ...

  • user_email인수 @에있는 경우search
  • user_loginID경우 search인수는 숫자입니다
  • user_url경우 search문자열이 포함 http://또는https://
  • 또는 ... user_login그리고 user_nicename문자열이있는 경우.

이러한 모든 기본값은 인수가 지정 되지 않은 경우에만 설정됩니다 search_columns.

메타 테이블 검색

예를 들어 first_name또는 로 검색 하려면 기본 테이블의 일부가 아니므로 last_name수행해야 meta_query합니다.

$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();

올바른 검색 문자열을 검색하십시오. 일반적으로 get_query_var('s');그럴 수도 있지만 양식에 따라 예를 들어 name/id검색하려는 것과 다를 수도 있습니다 $_GET['user_search']. 올바르게 도피하고 줄의 시작과 끝에서 불필요한 공백을 제거하십시오.

이것이 있음을 유의하십시오 array( array() )거기로 relation키를 누릅니다. 단일 키만 검색하려면 다음을 수행하는 것이 더 쉬울 수 있습니다.

$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();

최종 쿼리

결과 는 다음과 비슷하게 보일 수 있습니다 .

$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();

어떤 파일에서이 쿼리를 추가하고 싶습니까?
Naveen

@Naveen Best fit은 functions.php, 템플릿 또는 테마를 바꿀 때 기능을 잃지 않도록 사용자 정의 미니 플러그인으로 멋지게 싸서 있습니다.
카이저

답장을 보내 주셔서 감사합니다. 이 코드를 functions.php에 어떻게 통합 할 수
Naveen

3
@Naveen 그것은 범위를 벗어났습니다. 코드에 대해 조금 배우거나 개발자를 찾아야합니다. 그리고 그 Q / A를 읽으십시오 .
카이저

display_name의 열입니다 wp_users. 두 가지 질문이 떠 오릅니다. 1 : 이것이 데이터베이스 스키마의 최근 변경입니까? 2 : search_columns메타 쿼리 대신 값으로 사용할 수 있습니까 ?
henrywright

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.