订购WordPress的帖子

订购WordPress的帖子

问题描述:

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为了所有帖子的声明,除非类是“事件”,在这里我想对它们进行排序自定义事件日期。

正如你可能会说我非常前端,没有后端所以很多这是相当新的给我,所以任何帮助或建议表示赞赏。

希望我理解你的问题,使用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 $posts = query_posts($query_string . (is_category($events)?'&orderby='.$event_date:'&orderby=title') . '&order=asc'); ?> 
+0

我尝试过使用它,但之后都没有显示它们应该显示的内容。虽然欣赏了答复。 –

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

要订购的帖子自定义字段值,您需要将自定义元字段添加到查询本身。 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