Jak obsługiwane są akcje zbiorcze w niestandardowych klasach list?


9

Pracuję nad niestandardową tabelą danych do wyświetlenia na pulpicie nawigacyjnym WordPress. Tabela zostanie wypełniona z tabeli bazy danych, którą wbudowałem we wtyczce.

Korzystałem z dostarczonego przykładu niestandardowej tabeli list WordPress do większości moich pytań kodujących w tym obszarze, ale w tym przykładzie nie ma nic do obsługi akcji zbiorczych. Oto link do udokumentowanego przykładu: http://wordpress.org/extend/plugins/custom-list-table-example/

W przypadku przetwarzania akcji zbiorczych w przykładzie podano tylko:

    function process_bulk_action() {

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

        wp_die('Items deleted!');
    }

}

Chcę wiedzieć, jak wyciągnąć elementy wybrane do działania, aby móc je odpowiednio usunąć lub edytować wpisy w bazie danych.

Odpowiedzi:


11

Zakładając, że używasz standardowej funkcji column_cb (), tabela listy przekaże identyfikatory wybranych wierszy w tablicy w $ _GET, oznaczonych jako cokolwiek przypisanego do „liczby pojedynczej” w konstruktorze tabeli listy.

Oto typowa kolumna_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
        );
    }

Załóżmy na przykład, że mam tabelę z listą zawierającą filmy. Konstruktor wyglądałby następująco:

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?
        ) );

    }

Tak więc, jeśli zaznaczysz trzy wiersze w tabeli list, wybierz „Usuń” z listy działań zbiorczych i naciśnij Zastosuj, możesz uzyskać dostęp do wybranych wierszy za pomocą $ _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);
            }
        }

    }

Dzięki! Jakieś pomysły na wdrożenie akcji zbiorczej „edytuj”, która działa tak samo jak inne tabele WordPress?
Chiubaka,

Możesz sobie z tym poradzić w podobny sposób, ale interfejs użytkownika byłby o wiele bardziej zaangażowany. Prawdopodobnie nie użyłbym domyślnej metody process_bulk_actions () w takim przypadku, ponieważ najbardziej użytecznym interfejsem byłby prawdopodobnie taki, który zmienia wiersze siatki na pola edytowalne. W takim przypadku nadal otrzymujesz wybrane elementy w tablicy $ _GET, ale musisz zastąpić sposób, w jaki HTML jest generowany w klasie tabeli list. Znacznie bardziej złożony scenariusz, ale sposób dostępu do identyfikatorów jest taki sam.
Nate Dudek,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.