我试图从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之类的内容。
请参见下面我的答案。