Сортировать термины по пользовательской таксономии по пользовательским метаданным (pre_get_terms)
Я создал собственную таксономию под названием 'attach_cats' для медиа-вложений. Каждый термин в таксономии имеет собственные метаданные термина с ключом 'term_order' и мета-значением целого числа. Я добавил пользовательский столбец на страницу "edit-tag.php", которая отображает значение "term_order".
Теперь я хотел бы упорядочить термины по значению orderby, указанному в term_order. Я делаю это все время на странице "edit.php? Post_type =" с помощью следующей функции:
add_action('pre_get_posts', 'sort_by_meta_key');
function sort_by_meta_key($query){
global $pagenow;
if(is_admin()
&& 'edit.php' == $pagenow
&& isset($_GET['post_type']) && $_GET['post_type']=='gallery'){
$query->set( 'meta_key', 'gallery_pos' );
$query->set( 'orderby', 'meta_value_num' );
$query->set( 'order', 'ASC' );
}
}
Но когда я пытаюсь сделать это с помощью "терминов" вместо "сообщений" с использованием "pre_get_terms", это не работает. Вот что у меня есть:
add_action('pre_get_terms', 'term_sort_order');
function term_sort_order($query){
global $pagenow;
if(is_admin()
&& 'edit-tags.php' == $pagenow
&& isset($_GET['post_type'] ) && $_GET['post_type']=='attachment' ){
$query->set( 'meta_key', 'term_order' );
$query->set( 'orderby', 'meta_value_num' );
$query->set( 'order', 'ASC' );
}
}
// THIS RETURNS: Fatal error: Call to undefined method WP_Term_Query::set() ......
Любая помощь будет принята с благодарностью.
2 ответа
Попробуй это:
public function pre_get_terms( $query ) {
$meta_query_args = array(
'relation' => 'AND', // Optional, defaults to "AND"
array(
'key' => 'order_index',
'value' => 0,
'compare' => '>='
)
);
$meta_query = new WP_Meta_Query( $meta_query_args );
$query->meta_query = $meta_query;
$query->orderby = 'position_clause';
}
Для меня я сделал собственную таксономию, и в этой пользовательской таксономии у меня была собственная мета. Я хотел иметь в админке серверную колонку и сделал ее сортируемой. чтобы сделать сортируемую работу для пользовательской таксономии в пользовательской мета, я сделал это.
public function pre_get_terms( $query ) {
$meta_query_args = array(
'relation' => 'AND', // Optional, defaults to "AND"
array(
'key' => 'order_index',
'value' => 0,
'compare' => '>='
)
);
$meta_query = new WP_Meta_Query( $meta_query_args );
$query->meta_query = $meta_query;
$query->orderby = 'position_clause';
} Я нашел ответ по этой ссылке https://core.trac.wordpress.org/ticket/34996
Мне просто пришлось адаптировать ответ, предоставленный в комментариях @eherman24
просто не забудьте добавить хук действия pre_get_terms и затем использовать обратный вызов, предоставленный выше.