Klasa WP_List_Table stała się prywatna

Jeżeli korzystacie z wtyczek, które implementują w poniższy sposób klasę WP_List_Table to czas zmienić sposób dziedziczenia.

if(!class_exists('WP_List_Table')){
    require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
}

Od wersji 4.2, co nie zostało prawie nigdzie opisane, niektóre właściwości klasy WP_List_Table zostały oznaczone modyfikatorem private. Oznacza to, że nasza klasa nadrzędna nie jest już w pełni dostępna. Dodatkowo magiczna metoda __get sprawdza czy dane wprowadzane do obiektu zostały zdefiniowane w zmiennej compat_fields.

Jeżeli zmienne zostaną zdefiniowane w tablicy compat_fields, to nasza klasa będzie ponownie sprawna. Możemy to zrobić w następujący sposób:

        parent::__construct();
        $this->compat_fields = array( '_args', '_pagination_args', 'screen', '_actions', '_pagination', 'dbconnection', 'newstring' );

W moim przypadku zadeklarowałem dbconnection i newstring. Niestety mechanizm ten nie sprawdzi się, gdy nazwy zmiennych będą generowane dynamicznie.

W codexie wordperss-a jest jasno napisane, że tak klasa jest prywatna i żeby jej nie używać we wspomniany sposób. Dlatego musimy skopiować sobie plik dla tej klasy i ją trochę pozmieniać.

You may also like...

  • Warto pamiętać jeszcze o wielkim czerwonym napisie, który widnieje w Codexowej dokumentacji tej klasy (trudno mi teraz stwierdzić, jak długo już tam jest, ale co najmniej 6 miesięcy na pewno), a którego treść to:

    This class’s access is marked as private. That means it is not intended for use by plugin and theme developers as it is subject to change without warning in any future WordPress release. If you would still like to make use of the class, you should make a copy to use and distribute with your own project, or else use it at your own risk.

    Zwracam szczególnie uwagę na fragment „it is not intended for use by plugin and theme developers” 😉

  • Piotr Potrebka

    Widać niektórzy byli zbyt leniwi, żeby robić osobno 🙂