2015-07-25 2 views
0

Я использую последнюю версию WP, без плагинов, но один (я говорю об этом позже). Для каждой категории я назначил изображение с изображением, и я хотел бы сделать страницу, где каждая категория будет показана с ее изображением. Я установил плагин заказа порядка и таксономии, чтобы изменить порядок появления категорий. Например, у нас есть категории 1,2,3,4, а желаемый порядок - 3,1,2,4.Wordpress: Пользовательский запрос заказа (категории)

В functions.php я поставил

function wptp_add_categories_to_attachments() { 
    register_taxonomy_for_object_type('category', 'attachment'); 
} 
add_action('init' , 'wptp_add_categories_to_attachments'); 

для того, чтобы иметь признаки изображений для категорий.

В шаблоне моей страницы я поставил

$cats = get_categories(); 
    for_each ($cats as $category) 
    { 
    if ($category->term_id != 1){ 
     $terms[] = $category->term_id} 
} 

$args = array(
         'post_type' => 'attachment', 
         'post_status'=>'inherit', 
         'category__in' => $terms, 
         /*'order_by' => 'none' */ 
        ); 
$query = new WP_Query($args); 
....... 

Остальное код, где у меня есть выход на «должности». Проблема заключается в том, что $ термины содержит правильный порядок (3,1,2,4), $ запрос нет (4,3,2,1). Даже если я вручную помещаю цифры в 'cat' (в $ args), порядок вывода всегда один и тот же. Я даже создал строку от $ terms и использовал ее с 'cat', но результат тот же.

Есть ли способ сделать запрос, и результаты в порядке, который я хочу (не ASC, DESC или алфавитный, или зависящий от времени)?

ответ

0

get_categories() имеет по умолчанию order by name asc Так что вам просто нужно реплицировать это в вашем массиве, переданном wp_query. Категории хранятся в wp_terms таблице, где term_id является внешним ключом к wp_term_taxonomy .Здесь у вас есть term_taxonomy_id, который является внешним ключом к таблице wp_term_relationships .в этой последней таблице вы имеете object_id, который относится к post_id в таблице wp_posts. Так все, что вам нужно сделать, это написать пользовательский запрос объединить все эти таблицы и повторить заказ в get_categories.Something как

SELECT wt.name ,wp.* 
FROM wp_terms wt JOIN wp_term_taxonomy wtt 
ON wt.term_id =wtt.term_id 
JOIN wp_term_relationships wtr 
ON wtr.term_taxonomy_id=wtt.term_taxonomy_id 
JOIN wp_posts wp ON wp.id= wtr.object_id 
WHERE wp.post_type = 'attachment' AND post_status='inherit' 
AND... 
ORDER BY wt.name ASC 
+0

Спасибо, но проблема появляется в $ запросе. Даже если я вручную помещаю номера категорий, он всегда упорядочен в DESC (даже если я добавлю «no ordering»). – user1496047

+0

@ user1496047 $ Запрос, поскольку он не ссылается на другие таблицы, которые содержат именованный порядок, вы пытаетесь заказать значения, которых нет – Mihai

Смежные вопросы