Сортировка терминов в настраиваемой таксономии по настраиваемым метаданным (pre_get_terms)

Я создал специальную таксономию под названием «attach_cats» для мультимедийных вложений. Каждый термин в таксономии имеет метаданные настраиваемого термина с ключом term_order и мета-значением целого числа. Я добавил настраиваемый столбец на страницу "edit-tag.php", который отображает значение 'term_order'.

Теперь я хотел бы упорядочить термины по значению term_order. Я все время делаю это на странице "edit.php? Post_type = page" с помощью следующей функции:

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() ......

Любая помощь будет принята с благодарностью.


person Jeremy    schedule 05.05.2017    source источник


Ответы (2)


попробуй это:

https://pastebin.com/vr2sCKzX

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';
}
person Lucas Gabriel    schedule 10.11.2017
comment
У вас должно быть действие для pre_get_terms, а затем в функции обратного вызова вы попробуете это выше. работал у меня. решение появилось в комментариях по этой ссылке: core.trac.wordpress.org/ticket/34996 комментарий eherman24 - person Lucas Gabriel; 10.11.2017
comment
Спасибо за ответ, хотя прошло уже 6 месяцев, с тех пор я больше ничего не делал в этом проекте (это был личный плагин, который я создавал) .... Я вернусь к нему завтра и попробую это. .. Спасибо. - person Jeremy; 11.11.2017

для меня я создал пользовательскую таксономию, и в этой пользовательской таксономии у меня была пользовательская мета. Я хотел, чтобы в админке был столбец, и сделал его сортируемым. чтобы сделать работу с сортировкой для настраиваемой таксономии в настраиваемой мета-мете, я сделал это.

https://pastebin.com/vr2sCKzX

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, а затем использовать обратный вызов, указанный выше.

person Lucas Gabriel    schedule 10.11.2017