WordPress

niestandardowe typy postów – sortuje Manage_edit-{post_type}_sortable_columns, ale źle!

  • 26 września, 2016
  • 3 min read
niestandardowe typy postów – sortuje Manage_edit-{post_type}_sortable_columns, ale źle!


Dzień dobry!

Jest to problem dotyczący zaplecza WordPress i niestandardowych typów postów. Spędziłem cały piątek na szukaniu i wypróbowywaniu możliwych rozwiązań i chociaż pomogli innym, w moim przypadku nie robią tego, czego potrzebuję.

Mam niestandardowy typ postu o nazwie „anco_project”, który wykorzystuje bardzo niewiele pól danych podanych przez WP, ale więcej niestandardowych z dodatku ACF, w tym pole o nazwie „anco_project_year_from” i jedno o nazwie „anco_project_year_to”, oba skonfigurowane jako „prawdziwa liczba” format.

Cel: Ponieważ te dwa pola zawierają lata rozpoczęcia i zakończenia budowy, chcę je posortować według podanych liczb. 1998, 2006, 2012, 2016, 2016

Interfejs użytkownika: Za pomocą następującego kodu udało mi się bez problemu posortować projekty według roku ich rozpoczęcia.

    $args = array(
            'post_type' => 'anco_project',
            'posts_per_page' => -1,
            'meta_key' => 'anco_project_year_from',
            'orderby' => 'meta_value_num',
            'order' => 'ASC'
    );
    query_posts($args);

Zaplecze: Tutaj postępowałem zgodnie z kilkoma przewodnikami, których adresów URL już nie pamiętam (mój mózg został wyczyszczony przez weekend), ale „ostateczne” rozwiązanie z piątku wygląda tak.

    // Administration: Register columns as sortable
    function anco_project_manage_sortable_columns( $columns ) {
            $columns['anco_project_year_from'] = 'anco_project_year_from';
            $columns['anco_project_year_to'] = 'anco_project_year_to';
            return $columns;
    }
    add_filter( 'manage_edit-anco_project_sortable_columns', 'anco_project_manage_sortable_columns' );


    // Administration: Teach wordpress to make the column sortable
    function anco_project_year_column_orderby( $vars ) {
            if ( isset( $vars['orderby'] ) && 'anco_project_year_from' == $vars['orderby'] ) {
                    $vars = array_merge( $vars, array(
                            'meta_key' => 'anco_project_year_from',
                            'orderby' => 'meta_value_num'
                    ) );
            } else if ( isset( $vars['orderby'] ) && 'anco_project_year_to' == $vars['orderby'] ) {
                    $vars = array_merge( $vars, array(
                            'meta_key' => 'anco_project_year_to',
                            'orderby' => 'meta_value_num'
                    ) );
            }
            return $vars;
    }
    add_filter( 'request', 'anco_project_year_column_orderby' );

Sprawdziłem ponownie wszystkie użyte haczyki i wygląda na to, że tak powinno to działać.

Warto przeczytać!  Jak łatwo dodawać interaktywne obrazy 360 stopni w WordPress

Z powyższego kodu otrzymuję ładne filtry w nagłówkach i faktycznie coś robi po ich naciśnięciu, ale nie sortuje według niczego, co miałoby sens.

przykład

Posttype otworzył się świeżo w backendzie bez żadnych filtrów.
Adres URL: /wp-admin/edit.php?post_type=anco_project

wprowadź tutaj opis obrazu

Posttype posortowane według „od”.

Adres URL: /wp-admin/edit.php?post_type=anco_project&orderby=anco_project_year_from&order=asc
wprowadź tutaj opis obrazu

Kiedy sortuję według „anco_project_year_to” lub zmieniam kod, aby sortować według kolumny „lokalizacja”, zawsze kończy się to tak, jak kolejność drugiego obrazu. Odwrócenie kolejności z ASC na DESC również nie zmienia kolejności.

Czy ktoś spotkał się z tym samym problemem i ma na to rozwiązanie?


Źródło