우커머스로 쇼핑몰을 운영 시 유저 리스트에 운영에 필요한 컬럼들을 추가하고, 일부는 검색이 되도록 해 달라는 요청이 몇차례 있어서 최대한 간단한 방법으로 조치가 가능하도록 정리를 해 보았습니다. 필요하신 경우 한 번 응용을 해 보세요.
1. 어드민 유저 리스트에 컬럼을 추가하는 방법
플러그인 없이 functions,.php에 코드 추가로 모든 요청 내용이 처리가 가능하였지만, 그보다 서로 다른 상황에 따라 일일이 수정을 하기 보다는 전 admin column (free) 이라는 플러그인으로 간단하게 컬럼을 추가하는 방법을 주로 이용 중입니다.
(△ 기본 메타들은 선택만 하면 끝. 없는 메타정보는 커스텀 필드로 마음대로 추가 가능 ▽)
2. 추가된 ‘가입일’ 컬럼을 정렬이 가능한 컬럼으로 변경
( ※ 참고로 admin column pro 에는 컬럼 추가 시 이미 정렬가능토록 하는 옵션 외 다양한 기능이 제공됩니다. )
2-1) 유저 리스트에서 admin-column으로 추가한 컬럼의 th 태그 아이디를 확인합니다.
( 컬럼 아이디가 플러그인에 의해 임의로 생성이 되다 보니 난수값 같은 것으로 표시 )
2-2) functions.php에 해당 컬럼을 소트 가능한 컬럼으로 등록합니다.
add_filter( 'manage_users_sortable_columns', 'oks_make_registered_column_sortable' ); function oks_make_registered_column_sortable( $columns ) { return wp_parse_args( array( '5afe1649b6fd1' => 'registered' ), $columns ); // 확인한 컬럼 id로 교체하면 됨. 정렬에 필요한 값은 registered(가입일) }
가입일 컬럼이 정렬 가능하도록 변경이 되면 OK.
3. 추가된 이름(first_name) 컬럼도 유저 검색에 포함시키기
워드프레스에서 제공하는 pre_user_query 훅을 이용해서 검색 키워드를 추가합니다. (https://developer.wordpress.org/reference/hooks/pre_user_query/)
add_action( 'pre_user_query', function( $uqi ) { global $wpdb; $search = ''; if ( isset( $uqi->query_vars['search'] ) ) $search = trim( $uqi->query_vars['search'] ); if ( $search ) { $search = trim($search, '*'); $the_search = '%'.$search.'%'; $search_meta = $wpdb->prepare(" ID IN ( SELECT user_id FROM {$wpdb->usermeta} WHERE ( ( meta_key='first_name' OR meta_key='some_more' ) AND {$wpdb->usermeta}.meta_value LIKE '%s' ) )", $the_search); // OR 로 필요한 메타 키워드 게속 추가 가능 $uqi->query_where = str_replace( 'WHERE 1=1 AND (', "WHERE 1=1 AND (" . $search_meta . " OR ", $uqi->query_where ); } });
유저 리스트에서 이름 검색 결과 유저가 검색되면 OK
상황에 따라 전화번호나 기타 메타 정보를 컬럼에 추가하는 경우도 위 방법으로 뚝딱 적용이 가능합니다.
끝.
2 댓글. Leave new
안녕하세요. 좋은정보 너무 감사합니다.
알려주신 ” 2-2) functions.php에 해당 컬럼을 소트 가능한 컬럼으로 등록합니다. ” 의 코드를 알려주신 방법으로 제 코드로 변경하여 진행을 했는데 계속 애러가 뜨는데, 제가 초보라 뭘 잘못했는지를 도저히 찾을수가 없습니다. 제가 add한 코드는
add_filter( ‘manage_users_sortable_columns’, ‘oks_make_registered_column_sortable’ );
function oks_make_registered_column_sortable( $columns ) {
return wp_parse_args( array( ‘5e6aa645a669e’ => ‘registered’ ), $columns );
}
입니다. 혹시 제가 더 수정해야하는 부분이 있는지 감히 여쭤봅니다. 감사합니다.
어떤 에러가 발생하는 상황인가요? 사이트가 아예 안 열리는 것이라면 구문 에러가 있는 것이고요. 주로 { } 열고 닫고나 ;를 입력 안 한 경우 쉽게 발생합니다. 다른 특이사항이라면 알려 주세요.
추가로 핵심은 ‘manage_users_sortable_columns’ 라는 워드프레스의 소트 가능한 컬럼을 만들 수 있는 훅을 이용하는 것입니다. 이 훅을 검색해 보시면 더 정확한 정보 확인도 가능합니다.