WordPress 관리자 목록 테이블: 사용자 지정 필터 추가

게시 됨: 2021-02-26

WordPress 관리자의 페이지 및 게시물에 대한 대부분의 정보는 표로 구성되어 있습니다. WordPress를 사용하는 사람이라면 누구나 이러한 기능에 익숙할 것입니다. 그들은 잘 작동하고 특정 페이지 또는 게시물 정보의 '빠른 편집'을 수행하고 게시물이나 페이지가 게시된 날짜 등을 표시할 수 있습니다. 또한 각 테이블 상단에 표시되는 드롭다운 메뉴를 선택하여 이러한 테이블을 필터링할 수 있다는 사실을 눈치채셨을 것입니다.

그러나 필터는 소수에 불과합니다. 그렇다면 Admin에 필터 상자가 없는 값을 필터링하려면 어떻게 해야 할까요? 다행히 WordPress에서는 자체 필터를 추가할 수 있습니다. 방법을 알아보겠습니다.

맞춤 필터를 사용하는 이유는 무엇 입니까?

그렇다면 WordPress에서 관리 테이블을 구성하기 위해 정확히 사용자 정의 필터가 필요한 이유는 무엇입니까? 많은 수의 게시물 작성자와 많은 게시물이 있는 사이트가 있다고 가정해 보겠습니다.

Pressidium으로 웹사이트 호스팅

60일 환불 보장

계획 보기

수정 없이 관리 테이블에서 게시물 작성자를 볼 수 있습니다. 현재 할 수 없는 것은 작성자별로 게시물을 정렬하는 것입니다. 특정 작성자가 작성한 모든 게시물을 쉽게 볼 수 있도록 하려는 경우 분명히 이것은 중요한 제한 사항입니다. 모든 게시물 작성자의 드롭다운 메뉴를 보고 목록에서 하나를 선택할 수 있다면 도움이 될 것입니다. 그것은 정말 일을 가속화할 수 있습니다.

이것을 구축하는 방법을 살펴보겠습니다.

사용자 정의 필터 만들기

자신만의 필터를 구축하는 데 도움이 되도록 WordPress는 restrict_manage_postspre_get_posts 후크를 제공합니다.

restrict_manage_postswp-admin/includes/class-wp-posts-list-table.php 파일에 557행 주위에 도입되었으며 관리 테이블 목록 위에 Filter 버튼이 생성되기 전에 실행됩니다.

우리는 사용자 정의 함수를 사용하고 평소와 같이 restrict_manage_posts 후크와 연결합니다(이에 대한 자세한 정보는 여기를 참조하십시오). 활성 테마의 기본 폴더로 이동하여 좋아하는 편집기로 functions.php 파일을 엽니다. 파일 내용 끝에 아래 코드를 삽입합니다.

 function my_author_filter(){ $screen = get_current_screen(); global $post_type; if( $screen->id == 'edit-post' ){ $my_args = array( 'show_option_all' => 'All Authors', 'orderby' => 'display_name', 'order' => 'ASC', 'name' => 'authors_admin_filter', 'who' => 'authors', 'include_selected' => true ); if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); } wp_dropdown_users($my_args); } } add_action('restrict_manage_posts','my_author_filter');

우리가 사용한 주요 조건은 if( $screen->id == 'edit-post') 입니다. 여기서 우리는 현재 있는 화면 ID를 반환하는 get_current_screen() WordPress 함수를 사용했습니다.

이 경우 관리자 화면 ID는 '편집-게시물'입니다. 즉, 게시물 관리 화면에 있는지 확인합니다. 예를 들어 if( $screen->id == 'edit-page' 를 사용해야 하는 페이지 관리 화면에 이것을 적용하거나 사용자 정의 게시물 유형에 대해 작업하는 경우 edit-{post_type} 은 다음과 같습니다. 올바른 if 문.

참고: 각 관리자 화면에 해당하는 ID를 확인하려면 관리자 화면 참조에 대한 공식 문서를 확인할 수 있습니다.

아래 코드에서 작성자가 이미 선택되었는지 확인하고 선택한 경우 선택한 값을 적용합니다.

 if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); }

마지막으로 wp_dropdown_users WordPress 함수를 사용하여 이전에 정의한 인수에 따라 작성자의 드롭다운 목록을 생성합니다.

다음으로 show_option_all 인수에서 'show-all' 옵션을 표시할 텍스트를 선택했습니다. "모든 작성자" 문자열을 선택했습니다. 'name' 인수에서 드롭다운 목록에 대해 원하는 이름을 채웁니다. 나중에 이 값을 사용하여 게시물 목록 결과를 필터링합니다.

'who' 인수에서 쿼리할 사용자 유형(이 경우 'authors')을 정의합니다. 'include_selected' 인수를 사용하여 선택한 사용자 ID를 드롭다운 목록에 포함할지 여부를 선택합니다.

이 시점에서 관리자 게시물 화면을 새로 고치면 다른 내장 필터 메뉴 옆에 작성자 드롭다운 메뉴가 표시되어야 합니다.

값을 선택하고 "필터"를 누르면 페이지를 다시 로드할 때 값이 선택된 상태로 유지되지만 결과는 변경되지 않은 상태로 유지됩니다. 다음 단계에서는 선택한 작성자와 연결된 게시물만 표시하도록 게시물 목록을 필터링하기 위해 필요한 변경을 수행합니다.

결과 필터링

다시 한 번 pre_get_posts 필터가 작업을 수행합니다. WordPress Admin Search: Extending the Results 기사에서 이 후크를 조사했습니다. 이를 다시 사용하여 실제 쿼리가 실행되기 전에 사후 관리 화면에서 생성된 쿼리 변수 개체를 변경합니다. functions.php 에 다음 줄을 삽입하십시오.

 function my_author_filter_results($query){ $screen = get_current_screen(); global $post_type; if ( $screen->id == 'edit-post' ) { if(isset($_GET['authors_admin_filter'])){ $author_id = sanitize_text_field($_GET['authors_admin_filter']); if($author_id != 0){ $query->query_vars['author'] = $author_id; } } } } add_action('pre_get_posts','my_author_filter_results');

이전과 마찬가지로 기본 조건은 관리자 게시물 화면에 있는지 확인하는 데에도 필요합니다.

$author_id = sanitize_text_field($_GET['authors_admin_filter']); $author_id 변수에 선택된 작성자 ID를 유지합니다. 그 후, 작성자 ID가 0이 아닌 경우(모든 작성자가 선택됨) 쿼리의 작성자 매개변수에 $author_id 값을 전달합니다.

그리고 그게 다야. 이제 표시된 게시물은 선택한 작성자/사용자 ID에 속한 게시물만 표시됩니다.

결론

관리 화면의 맞춤 필터링을 사용하면 관리 사용자가 콘텐츠를 쉽게 검색할 수 있으며, 이는 게시물이나 페이지가 많을 때 매우 유용할 수 있습니다. 물론 이것은 Admin 테이블에서 필터를 사용하는 한 가지 가능한 방법일 뿐입니다. 유용하다고 생각할 수 있는 수많은 대체 방법이 있으며 여기에 설명된 기술이 자신만의 필터를 만드는 데 도움이 되기를 바랍니다.

예를 들어 지난 30일 동안 작성된 게시물을 표시하는 옵션이 있는 드롭다운 필터 메뉴를 만들거나 분류별로 게시물을 정렬하는 필터를 만들 수 있습니다. query_vars 목록은 가능한 옵션을 브레인스토밍하는 데 도움이 될 수 있습니다!.

이 멋진 기능으로 즐겁게 놀아보세요!

또한보십시오

WordPress 관리자 목록 테이블: 사용자 지정 필터 추가
WordPress 사용자 정의 필드 시작하기