2012-09-07 4 views
5

UPDATE: Я попытался, используя следующий код:Заказ сообщений Wordpress на основе родительской категории

<?php if (is_category(events)) { 
$posts = query_posts($query_string . '&orderby=event_date&order=desc'); 
} else { 
    $posts = query_posts($query_string . '&orderby=title&order=asc'); 
    } 
?> 

Есть ли причина, почему не работал бы? Кажется, что он отлично работает в порядке постов в алфавитном порядке, но по-прежнему не повезло с порядком даты в «событиях».

-

После поиска с помощью различных существующих вопросов, которые я не могу достаточно найти решение, что я пытаюсь сделать.

В настоящее время все должности на моем сайте заказываются по алфавиту, что прекрасно, за исключением одной новой категории, которую я добавил. Для этой категории я хочу заказать все сообщения по значению, которое я ввожу в настраиваемое поле. Поле называется «event_date» - поэтому я хочу упорядочить посты по дате по существу, но не дату создания сообщения, дату, когда пользователь вручную входит в это поле.

мне удалось получить его работу с помощью:

<?php if (is_category($events)) { $posts = query_posts($query_string . '&orderby=$event_date&order=asc'); } ?> 

Однако это перекрывает aphabetical порядок для всех остальных страниц.

Для алфавита Я использую:

<?php if (is_category()) { $posts = query_posts($query_string . '&orderby=title&order=asc'); } ?> 

По существу я хочу заявление, сообщающую страницу заказать все сообщения в aphabetical порядка, если категория не «события», где я хочу заказать их пользовательская дата события.

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

ответ

0

Надеюсь, я понял ваш вопрос, используйте WP_Query и в orderby добавить пробел между вашим заказом по столбцам:

$args = array(
    'posts_per_page' => 100, 
    'orderby' => 'title', 
    'order' => 'ASC', 
); 

if(is_category($events)){ 
    $args['orderby'] .= " meta_value_num"; 
    $args['meta_key'] = 'event_date'; 
} 

$posts = (array) new WP_Query($args); 
+0

Могу ли я использовать оператор if там где-нибудь, но чтобы сообщить категории событий для отображения страницы по-разному в других категориях? –

+0

Да, вы бы это сделали. Обновление ответа –

+0

Очень ценю вашу помощь в этом, но мне все еще не удаётся использовать WP-Query. Есть ли причина, по которой следующее будет работать правильно? Он отображает все категии в алфавитном порядке, но не события в порядке даты?

0

Что о:

<?php $posts = query_posts($query_string . (is_category($events)?'&orderby='.$event_date:'&orderby=title') . '&order=asc'); ?> 
+0

Я попытался использовать это, но потом не отображался так, как должен. Однако оцените ответ. –

0
<?php 
$recent = new WP_Query(“cat=ID&showposts=x”); 
while($recent->have_posts()) : $recent->the_post(); 
?> 
1

Чтобы заказать сообщения настраиваемое значение поля, вам нужно добавить настраиваемое мета-поле к самому запросу. orderby=meta_value в дополнение к meta_key=metafieldid разрешит заказ таким образом.

Я бы использовал pre_get_posts hook и изменил объект запроса, если get_query_var("cat") (или аналогичный запрос var) возвращает нужную категорию сообщения.

add_action("pre_get_posts", "custom_event_post_order"); 

function custom_event_post_order($query) 
{ 
    $queried_category = $query -> get_query_var("cat"); 

    /* 
    * If the query in question is the template's main query and 
    * the category ID matches. You can remove the "is_main_query()" 
    * check if you need to have every single query overridden on 
    * a page (e.g. secondary queries, internal queries, etc.). 
    */ 
    if ($query -> is_main_query() && $queried_category == 123) 
    { 
     $query -> set("meta_key", "event_date"); // Your custom field ID. 
     $query -> set("orderby", "meta_value"); // Or "meta_value_num". 
     $query -> set("order", "ASC"); // Or "DESC". 
    } 
} 

Помните, что этот подход отменяет все запросы, которые используют рассматриваемую категорию. Вы можете создавать пользовательские объекты WP_Query, которые используют свои собственные параметры для построения циклов.

Вы также должны стандартизировать способ сохранения пользовательских данных поля в базе данных. Для дат я предпочитаю использовать временные метки UNIX-timestamp, которые легко перемещать и манипулировать. Таким образом, никакие несчастные случаи не возникают, когда запрос и некоторые данные отформатированы другим способом, чем остальные.

Отказ от ответственности: У меня не было времени проверить приведенный выше код в действии, но общая идея должна работать должным образом.

EDIT: конечно, вышеуказанный код должен быть вставлен в functions.php или аналогичный файл общих функций.

+0

Очень хорошее и чистое решение! – Philipp

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