Hay una tarea en WordPress para que la taxonomía personalizada muestre los términos ordenados por el valor del metacampo en el formato DATETIME (Ymd H:i:s)
el campo meta se configura con el complemento ACF y todo está bien en la base de datos:
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 );
La condición de filtrado de conference_id funciona bien, pero la clasificación no.
Lo intenté así:
$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);
todo está ordenado correctamente:
Array
(
[0] => WP_Term Object
(
[term_id] => 67
[name] => Tasty breakfast
[slug] => tasty-breakfast
[term_group] => 0
[term_taxonomy_id] => 67
[taxonomy] => program_session
How to sort WordPress custom taxonomy terms by meta field value in admin panel? =>
[parent] => 0
[count] => 0
[filter] => raw
)
[1] => WP_Term Object
(
[term_id] => 65
[name] => Good lunch
[slug] => good-lunch
[term_group] => 0
[term_taxonomy_id] => 65
[taxonomy] => program_session
How to sort WordPress custom taxonomy terms by meta field value in admin panel? =>
[parent] => 0
[count] => 0
[filter] => raw
)
[2] => WP_Term Object
(
[term_id] => 66
[name] => Just dinner
[slug] => and-just-dinner
[term_group] => 0
[term_taxonomy_id] => 66
[taxonomy] => program_session
How to sort WordPress custom taxonomy terms by meta field value in admin panel? =>
[parent] => 0
[count] => 0
[filter] => raw
)
)
resolvió temporalmente el problema de esta manera, ¡pero no es bonito!
add_filter( 'get_terms_args', function ( $args, $taxonomies ) {
global $pagenow;
if ( is_admin() && $pagenow == 'edit-tags.php' && $taxonomies[0] == 'program_session' ) {
$args['menu_order'] = false;
$args['ignore_term_order'] = false;
$args['meta_query'] = [
'conference' => [
'key' => 'conference_id',
'value' => get_active_conf_id(),
'compare' => 'LIKE'
],
];
}
return $args;
}, 10, 2 );
add_filter( 'terms_clauses', function ( $pieces, $taxonomies, $args ) {
global $pagenow, $wpdb;
if ( is_admin() && $pagenow == 'edit-tags.php' && $taxonomies[0] == 'program_session' ) {
$pieces['join'] .= ' INNER JOIN ' . $wpdb->termmeta . ' AS tm ON t.term_id = tm.term_id ';
$pieces['where'] .= ' AND tm.meta_key = "program_session_start"';
$pieces['orderby'] = ' ORDER BY tm.meta_value ';
}
return $pieces;
}, 10, 3 );
.

