WP_Query: сортировка по числовому значению таксономии в WordPress

20 февр. 2013 г., 16:37:43
Просмотры: 14K
Голосов: 3

У меня есть такой запрос...

<?php 

    $press = new WP_Query(array(
        'posts_per_page' => -1,
        'post_type'     => 'individual',
        'post_status'   => 'private' 
    ));

    if ($press->have_posts()) : while ($press->have_posts()) : $press->the_post();

?>

Но мои пользовательские типы записей используют пользовательскую таксономию с числовым значением термина.

Мой вопрос: есть ли возможность отсортировать этот запрос по значению термина?

Таксономия называется 'individual-group'

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

Джош

0
Все ответы на вопрос 3
1

Нет, в стандартном ядре WordPress такой возможности нет. @heathenJesus говорит о метаданных, а не о таксономиях. Правильное решение можно найти здесь: http://scribu.net/wordpress/sortable-taxonomy-columns.html.

Более подробное объяснение, почему это не встроено в ядро: Using wp_query is it possible to orderby taxonomy?

1 мар. 2013 г. 00:37:59
Комментарии

Спасибо, Эван, в будущем я обязательно создам meta keys, если мне понадобится сортировать термины таксономии.

Joshc Joshc
1 мар. 2013 г. 11:54:30
0

Вот сложный запрос, который я использовал для числовой сортировки и фильтрации запроса записей по слагам таксономии.

$my_post_type = 'some_post_type'; // Тип записи
$my_term_slug_to_be_used_for_Ordering = 'some_slug'; // Слаг таксономии для сортировки
$my_term_slug_to_be_used_for_Filtering = 'some_other_slug'; // Слаг таксономии для фильтрации

$querystr = "
  SELECT 
   $wpdb->posts.*, $wpdb->term_relationships.object_id, 
   (SELECT wpt.slug
        FROM $wpdb->term_taxonomy wptt 
        INNER JOIN $wpdb->term_relationships wptr ON wptt.term_taxonomy_id = wptr.term_taxonomy_id
        INNER JOIN $wpdb->terms wpt ON wpt.term_id = wptt.term_id
        WHERE 
        wptr.object_id = $wpdb->term_relationships.object_id AND 
        wptt.taxonomy = 'my_term_slug_to_be_used_for_Ordering') AS numeric_column_value

    FROM $wpdb->term_taxonomy INNER JOIN $wpdb->term_relationships ON $wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id
         INNER JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->term_relationships.object_id
         INNER JOIN $wpdb->terms ON $wpdb->terms.term_id = $wpdb->term_taxonomy.term_id
    WHERE 
         $wpdb->terms.slug = '{$my_term_slug_to_be_used_for_Filtering}' AND
         $wpdb->posts.post_type = '$my_post_type' AND $wpdb->posts.post_status = 'publish'

    ORDER BY numeric_column_value * 1 DESC"; // На самом деле это строка, поэтому * 1 для числового преобразования

$r = $wpdb->get_results($querystr, OBJECT);
4 мар. 2014 г. 22:04:12
6

Конечно, в параметре orderby есть опция под названием meta_value_num, которая должна делать именно то, что вам нужно.

http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters


$press = new WP_Query(array(
    'posts_per_page' => -1,
    'post_type'      => 'individual',
    'post_status'    => 'private',
    'orderby'        => 'meta_value_num',
    'meta_key'       => 'individual-group'
));
20 февр. 2013 г. 17:02:27
Комментарии

... при условии, что meta_value действительно является числом. Здесь есть немало постов, где люди пытаются численно сортировать то, что не является числами :) @heathenJesus, не могли бы вы предоставить пример кода. Ответы только со ссылками не приветствуются.

s_ha_dum s_ha_dum
20 февр. 2013 г. 17:44:08

Вопрос конкретно указывал "пользовательская таксономия с числовым значением термина."

Добавлена демонстрация использования 'meta_value_num'.

heathenJesus heathenJesus
21 февр. 2013 г. 23:03:00

О, я понимаю. Это никоим образом не критика вашего ответа. Просто я, в целом, не доверяю людям, когда они говорят "числовой". Иногда это означает что-то вроде "$100" или "123-04". В разговорной речи это числа, но для программного обеспечения они не являются числовыми. И я работаю в офисе, полном таких людей, поэтому научился уточнять очень внимательно.

s_ha_dum s_ha_dum
21 февр. 2013 г. 23:18:51

Справедливо, @s_ha_dum

heathenJesus heathenJesus
21 февр. 2013 г. 23:22:45

@heathenJesus то есть ты говоришь, что я могу запрашивать термины таксономии так же, как пользовательские поля? Я думал, что мета-ключи и зарегистрированные термины таксономии - это разные вещи... Например, можно ли запросить через твой метод термин категории, используя 'meta_key'? Я не думал, что так можно сделать...

Joshc Joshc
23 февр. 2013 г. 02:32:14

Типа 'orderby' => 'meta_value_num', 'meta_key' => 'category'? Очевидно, мой термин категории должен быть чисто числовым, чтобы функция orderby работала, конечно...

Joshc Joshc
23 февр. 2013 г. 02:36:27
Показать остальные 1 комментариев