2012-09-07 88 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_Queryorderby內列訂單之間添加空格:

$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的運氣。 有沒有什麼原因可以解決以下問題?它按字母順序顯示所有cateogies,但不按日期順序顯示事件? <?php if(is_category(events)){ \t $ posts = query_posts($ query_string。'&orderby = event_date&order = desc');其他{ \t $ posts = query_posts($ query_string。'&orderby = title&order = asc'); \t} ?> –

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時間戳格式化時間。這樣查詢時就不會發生意外事件,而其他一些數據則以其他方式進行格式化。

聲明:我沒有時間測試上面的代碼,但總體思路應該正常。

編輯:當然上面的代碼應該插入到functions.php或類似的通用函數文件。

+0

非常好,乾淨的解決方案! – Philipp