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ć.
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
Posttype posortowane według „od”.
Adres URL: /wp-admin/edit.php?post_type=anco_project&orderby=anco_project_year_from&order=asc
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?