Есть задача в WordPress для кастомной таксономии выводить термины с сортировкой по значению мета поля в формате DATETIME (Y-m-d H:i:s)
мета поле задано с помощью ACF-плагина и в БД всё ок:
полный код:
add_filter( 'get_terms_args', function ( $args, $taxonomies ) {
global $pagenow;
if ( is_admin() && $pagenow == 'edit-tags.php' && $taxonomies[0] == 'program_session' ) {
$args['meta_query'] = [
'relation' => 'AND',
'conference' => [
'key' => 'conference_id',
'value' => get_active_conf_id(),
'compare' => 'LIKE'
],
'session_start' => array(
'key' => 'program_session_start',
'type' => 'DATETIME',
'compare' => 'EXISTS',
),
];
$args['orderby'] = 'session_start';
$args['order'] = 'ASC';
}
return $args;
}, 10, 2 );
Условие фильтрации по conference_id работает прекрасно, а вот сортировка нет.
Пробовал вот так:
$term_query = new WP_Term_Query( [
'taxonomy' => ['program_session'],
'hide_empty' => false,
'meta_query' => [
'relation' => 'AND',
'conference' => [
'key' => 'conference_id',
'value' => get_active_conf_id(),
'compare' => 'LIKE'
],
'session_start' => array(
'key' => 'program_session_start',
'type' => 'DATETIME',
),
],
'orderby' => 'session_start',
'order' => 'ASC',
] );
echo '<pre>';
print_r($term_query->terms);
всё сортируется правильно:
Array
(
[0] => WP_Term Object
(
[term_id] => 67
[name] => Вкусный завтрак
[slug] => vkus
[term_group] => 0
[term_taxonomy_id] => 67
[taxonomy] => program_session
[description] =>
[parent] => 0
[count] => 0
[filter] => raw
)
[1] => WP_Term Object
(
[term_id] => 65
[name] => Хороший обед
[slug] => horoshij-obed
[term_group] => 0
[term_taxonomy_id] => 65
[taxonomy] => program_session
[description] =>
[parent] => 0
[count] => 0
[filter] => raw
)
[2] => WP_Term Object
(
[term_id] => 66
[name] => И просто ужин
[slug] => uzhin
[term_group] => 0
[term_taxonomy_id] => 66
[taxonomy] => program_session
[description] =>
[parent] => 0
[count] => 0
[filter] => raw
)
)
что-то не так с фильтром для
get_terms_args ?