WordPress Orderby数值不起作用

时间:2011-03-26 作者:Dwayne Charrington

我试图从wpsc产品post类型中获取所有产品,然后通过名为release\\u date\\u year的自定义元字段显示它们。然而,它似乎并没有按此自定义元值对我的帖子进行排序。

我已经阅读了无数的博客帖子、Wordpress论坛上的支持帖子以及Wordpress答案上的许多问题和答案。然而,我找不到解决我的问题的办法。

下面是我用来获取产品并通过自定义元字段订购它们的代码。忽略each\\u connected参数,因为这是用于Scribu发布的插件帖子的参数。简要说明:我还尝试删除了each\\u连接的部分,以查看它是否解决了问题,但正如我所怀疑的那样,它没有改变任何事情。

似乎下面的代码可以获得产品,这不是问题所在。问题似乎是,它们是按发布日期排序的,而不是按自定义元字段值(即数字值)排序的。

    $products = new WP_Query(array(
        \'post_type\'         => \'wpsc-product\',
        \'nopaging\'          => true,
        \'meta_key\' => \'release_date_year\',
        \'each_connected\' => array(
            \'post_type\' => \'artists\',
            \'nopaging\'  => true,
        ),
        \'suppress_filters\' => false,
        \'orderby\' => \'meta_value_num\',
        \'order\' => \'asc\',
    ));
然后,我查看了正在运行的查询,结果如下:

SELECT   wp_posts.* FROM wp_posts  INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1  AND wp_posts.post_type = \'wpsc-product\' AND (wp_posts.post_status = \'publish\' OR wp_posts.post_status = \'private\') AND wp_postmeta.meta_key = \'release_date_year\' GROUP BY wp_posts.ID ORDER BY wp_posts.menu_order, wp_posts.post_date DESC           
现在是我还是我的查询中的“ORDER BY”部分应该有wp\\U Posteta。meta\\u键在其中?因为在我看来,它是按菜单顺序排序,然后按发布日期降序排列的。另一件奇怪的事是,我还看到帖子被降序排列,而不是升序排列。

正如我所说,我还尝试在我的WP\\u查询查询中使用meta\\u查询,因为我使用Wordpress 3.1,使用以下代码,它仍然按post\\u日期排序帖子:

$products = new WP_Query(array(
    \'post_type\'         => \'wpsc-product\',
    \'nopaging\'          => true,
    \'meta_key\' => \'release_date_year\',
    \'meta_query\' => array(array(
        \'key\'  => \'release_date_year\',
        \'type\' => \'NUMERIC\'
    )),
    \'each_connected\' => array(
        \'post_type\' => \'artists\',
        \'nopaging\'  => true,
    ),
    \'suppress_filters\' => false,
    \'orderby\' => \'meta_value\',
    \'order\' => \'desc\',
));
我的WP\\U查询语句是否格式错误,或者是否有其他原因?我还确认了wp\\U Posteta表中有数据,每个产品都有相应的值。

<小时>

Update and Solution

经过一番周旋,我找到了罪犯。一个名为“Post-Types-Order”的插件,它修改了我的Wordpress查询,因此导致suppress\\u filters参数被完全忽略,其中包括orderby之类的内容。

请参见下面我的答案。

2 个回复
最合适的回答,由SO网友:Dwayne Charrington 整理而成

插件\'Post Types Order\' 是罪魁祸首。正如Scribu在上面指出的那样,插件正在过滤原始SQL查询,而它不应该这样做。因此,参数\'suppress_filters\' 未停止正在修改的查询,并且orderby\' 争论被完全忽略了。

至于如何阻止这种行为,我不确定。我通过禁用插件解决了我的问题,因为它甚至没有被使用。但是,您可以使用\'menu_position\' 参数,该参数决定菜单的放置位置。

在Wordpress管理菜单中订购帖子类型的文档可以是found here 在官方Wordpress文档中。

这里学到的教训是,您应该始终假设插件破坏了某些东西,尤其是如果您使用的是有效的官方文档中的代码。

SO网友:scribu

看起来您的“orderby”参数被完全忽略了。

尝试设置\'suppress_filters\' => true 确保没有干扰。

结束

相关推荐

Display/query post formats

WP 3.1让每个人都对post格式感到兴奋,尽管有些困惑。启用新的帖子格式详细讨论了启用帖子格式的问题。只需将这一行添加到函数中即可。php:add_theme_support( \'post-formats\', array( \'aside\', \'gallery\' ) );显示特定格式的帖子,但几乎没有涉及显示这些帖子的问题。使用以下示例记录显示/查询特定格式帖子的过程:假设我们想在侧边栏中添加一个类似于推特的状态更新。很容易启用status 帖子格式,但我如何实际查询这些帖子以使它们显示在侧