사용자 정의 목록 테이블 클래스에서 대량 조치는 어떻게 처리됩니까?


9

WordPress 대시 보드에 표시 할 사용자 지정 데이터 테이블을 작업 중입니다. 플러그인으로 작성한 데이터베이스 테이블에서 테이블이 채워집니다.

이 영역의 대부분의 코딩 질문에 제공된 WordPress 사용자 정의 목록 테이블 예제를 사용했지만 예제에는 대량 작업을 처리하기위한 내용이 없습니다. 문서화 된 예제에 대한 링크는 다음과 같습니다. http://wordpress.org/extend/plugins/custom-list-table-example/

대량 작업을 처리하기 위해 예제는 다음을 제공합니다.

    function process_bulk_action() {

    //Detect when a bulk action is being triggered...
    if( 'delete'===$this->current_action() ) {

        wp_die('Items deleted!');
    }

}

작업에 대해 선택된 항목을 가져 오는 방법을 알고 싶습니다. 따라서 항목을 삭제하거나 그에 따라 데이터베이스 항목을 편집 할 수 있습니다.

답변:


11

표준 column_cb () 함수를 사용한다고 가정하면 목록 테이블은 $ _GET의 배열에서 선택된 행의 ID를 목록 테이블의 생성자에서 '단일'로 할당 된 것으로 레이블이 지정된 $ _GET의 배열로 전달합니다.

일반적인 column_cb ()는 다음과 같습니다.

function column_cb($item){
        return sprintf(
            '<input type="checkbox" name="%1$s[]" value="%2$s" />',
            /*$1%s*/ $this->_args['singular'],  //Let's simply repurpose the table's singular label ("video")
            /*$2%s*/ $item->id             //The value of the checkbox should be the record's id
        );
    }

예를 들어 비디오를 표시하는 목록 테이블이 있다고 가정 해 봅시다. 생성자는 다음과 같습니다.

function __construct(){
        global $status, $page;

        //Set parent defaults
        parent::__construct( array(
            'singular'  => 'video',     //singular name of the listed records
            'plural'    => 'videos',    //plural name of the listed records
            'ajax'      => false        //does this table support ajax?
        ) );

    }

따라서 목록 테이블에서 3 개의 행을 확인하고 일괄 작업 목록에서 "삭제"를 선택하고 적용을 누르면 $ _GET [ 'video']를 사용하여 선택한 행에 액세스 할 수 있습니다.

function process_bulk_action() {

        //Detect when a bulk action is being triggered...
        if( 'delete'===$this->current_action() ) {
            foreach($_GET['video'] as $video) {
                //$video will be a string containing the ID of the video
                //i.e. $video = "123";
                //so you can process the id however you need to.
                delete_this_video($video);
            }
        }

    }

감사! 다른 WordPress 테이블과 동일한 방식으로 작동하는 "편집"대량 작업을 구현하는 방법에 대한 아이디어가 있습니까?
Chiubaka

UI가 훨씬 더 복잡하다는 점을 제외하고 비슷한 방식으로 처리 할 수 ​​있습니다. 아마도 가장 유용한 인터페이스는 그리드 행을 편집 가능한 필드로 변경하는 인터페이스 일 것이므로 이런 경우에는 기본 process_bulk_actions () 메소드를 사용하지 않을 것입니다. 이 경우에도 여전히 $ _GET 배열에 선택된 항목이 표시되지만 목록 테이블 클래스에서 HTML이 출력되는 방식을 재정의해야합니다. 시나리오가 훨씬 더 복잡하지만 ID에 액세스하는 방법은 동일합니다.
Nate Dudek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.