在帖子页面上按元值对帖子进行排序

时间:2012-05-24 作者:jammypeach

我读了很多关于如何通过meta_value, 但我似乎无法让它为我工作。

我的meta_key 被称为date, 它存储为yyyy-mm-dd.

到目前为止,我已经做到了:

$args = array(
    \'posts_per_page\' => -1,
    \'meta_key\' => \'date\',
    \'orderby\' => \'meta_value_num\',
    \'order\' => \'DESC\',
    \'post_type\' => \'post\',
    \'post_status\' => \'publish\'         
);
query_posts($args);
if (have_posts()) while (have_posts()) : the_post(); 
据我所知,这应该给我我想要的东西,但是在索引上这样做。php页面似乎没有更改查询。这些帖子似乎仍然由post_date 而不是我的date 元值,这是不同的。

我要做的是覆盖或更改帖子和归档页面上的查询,以便它按我的meta\\u键排序。它出现在每个帖子上,所以如果没有它,该怎么办没有问题。

我的论点正确吗?如果正确,我还需要做些什么才能让它发挥作用?

感谢您的帮助

Update:

我尝试将WP\\u Query()与这些参数一起使用,并打印出对象。这个request 排序对象的方法menu_order ASC 完全忽略了我的meta\\u value\\u num参数。这就是为什么排序不起作用,但查询的其余部分没有问题。你知道为什么WP会忽略我的订单参数吗?

Another Update

好吧,缩小范围。日期存储为text 在Posteta表中,尝试按它排序,并期望MySQL将其视为日期,这有点愚蠢。为此,我编写了自己的查询,以获取所需内容:

SELECT wp_posts.post_title,
       m.*, 
       STR_TO_DATE(m.meta_value, \'%Y-%m-%d\') AS m_date
FROM wp_posts  
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = \'date\')
WHERE post_status=\'publish\' AND post_type=\'post\'
ORDER BY m_date DESC
请注意STR_TO_DATE() 呼叫这会将字符串强制转换为日期,从而允许MySQL按其正确排序。呸。现在编辑我的循环。。。。

或者,是否有人知道我可以使用一个钩子来就地编辑该查询,就像它被称为钩子一样?这比运行两个查询要高效得多。

1 个回复
最合适的回答,由SO网友:jammypeach 整理而成

所以我想出了如何得到我想要的,但它仍然不完美。问题围绕着我的自定义元值是如何存储的——基本上是作为字符串存储的。

我需要告诉MySQL这是一个日期,所以可以用它来订购帖子。为此,我使用了一个自定义查询:

    $posts = $wpdb->get_results( 
       "SELECT wp_posts.*, 
        STR_TO_DATE(m.meta_value, \'%Y-%m-%d\') AS m_date 
        FROM wp_posts 
        LEFFT JOIN wp_postmeta AS m ON(wp_posts.ID=m.post_id AND m.meta_key=\'date\')
        WHERE post_status=\'publish\' AND post_type=\'post\'
        ORDER BY m_date DESC"
);

if ($posts):
    global $post;
    foreach ($posts as $post):
        setup_postdata($post);
        echo get_the_title(); //finally in the right order!
    endforeach;
endif;
这使用MySQL函数STR_TO_DATE() 将元值转换为日期,然后使用它在ORDER BY 条款

所以这一切都很好,但如果我能在查询运行之前钩住它,并稍微修改一下SQL,那就更好了,我可以在查询方面节省很多钱。这个网站很小,所以它不是一个大问题,但积少成多。

如果有人知道怎么做,我很乐意接受这个答案,而不是我自己的答案。

参考文献:

http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

结束