如何按自定义域对帖子进行排序?

时间:2013-10-08 作者:William

有人能告诉我为什么这不起作用吗:

$args = array(
    \'cat\' => \'2,39,30\',
    \'orderby\' => \'title\', 
    \'order\' => \'ASC\',
    \'orderby\' => \'meta_value_num\',  
    \'meta_key\' => \'album_rating\',  
    \'order\' => \'DESC\'
);

$the_query = new WP_Query( $args );
我想根据他们的评级(工作)和字母顺序(不工作)来订购这些帖子

谢谢

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

var_dump 你的$args 参数:

array(4) {
  ["cat"]=>
  string(7) "2,39,30"
  ["orderby"]=>
  string(14) "meta_value_num"
  ["order"]=>
  string(4) "DESC"
  ["meta_key"]=>
  string(12) "album_rating"
}
第二次使用密钥时,会覆盖第一次。不能这样构建阵列。

这个orderby 参数将采用空格分隔的字符串,因此这更接近:

$args = array(
    \'cat\' => \'2,39,30\',
    \'orderby\' => \'title meta_value_num\', 
    \'order\' => \'ASC\',
    \'meta_key\' => \'album_rating\',  
    \'order\' => \'DESC\'
);
但与之前一样,您不能使用同一个键两次,并且仍在尝试使用order 两次如果查看SQL,您将看到只使用最后一个值,并且它应用于最后一个orderby 价值

ORDER BY wp_posts.post_title,wp_postmeta.meta_value+0 DESC LIMIT 0, 1
更接近。。。

$args = array(
    \'cat\' => \'2,39,30\',
    \'orderby\' => \'title meta_value_num\', 
    \'meta_key\' => \'album_rating\',  
    \'order\' => \'DESC\'
);
这可能会让你得到你想要的。当然,您需要一个过滤器:

function alter_order_wpse_117098($orderby) {
  remove_action(\'posts_orderby\',\'alter_order_wpse_117098\');
  $order = str_replace(\',\',\' ASC, \',$orderby);
  return $order;
}
add_action(
  \'posts_orderby\',
  \'alter_order_wpse_117098\'
);
在有问题的查询之前添加该筛选器。它将自行删除,因此不应打乱任何其他查询。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post

如何按自定义域对帖子进行排序? - 小码农CODE - 行之有效找到问题解决它

如何按自定义域对帖子进行排序?

时间:2013-10-08 作者:William

有人能告诉我为什么这不起作用吗:

$args = array(
    \'cat\' => \'2,39,30\',
    \'orderby\' => \'title\', 
    \'order\' => \'ASC\',
    \'orderby\' => \'meta_value_num\',  
    \'meta_key\' => \'album_rating\',  
    \'order\' => \'DESC\'
);

$the_query = new WP_Query( $args );
我想根据他们的评级(工作)和字母顺序(不工作)来订购这些帖子

谢谢

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

var_dump 你的$args 参数:

array(4) {
  ["cat"]=>
  string(7) "2,39,30"
  ["orderby"]=>
  string(14) "meta_value_num"
  ["order"]=>
  string(4) "DESC"
  ["meta_key"]=>
  string(12) "album_rating"
}
第二次使用密钥时,会覆盖第一次。不能这样构建阵列。

这个orderby 参数将采用空格分隔的字符串,因此这更接近:

$args = array(
    \'cat\' => \'2,39,30\',
    \'orderby\' => \'title meta_value_num\', 
    \'order\' => \'ASC\',
    \'meta_key\' => \'album_rating\',  
    \'order\' => \'DESC\'
);
但与之前一样,您不能使用同一个键两次,并且仍在尝试使用order 两次如果查看SQL,您将看到只使用最后一个值,并且它应用于最后一个orderby 价值

ORDER BY wp_posts.post_title,wp_postmeta.meta_value+0 DESC LIMIT 0, 1
更接近。。。

$args = array(
    \'cat\' => \'2,39,30\',
    \'orderby\' => \'title meta_value_num\', 
    \'meta_key\' => \'album_rating\',  
    \'order\' => \'DESC\'
);
这可能会让你得到你想要的。当然,您需要一个过滤器:

function alter_order_wpse_117098($orderby) {
  remove_action(\'posts_orderby\',\'alter_order_wpse_117098\');
  $order = str_replace(\',\',\' ASC, \',$orderby);
  return $order;
}
add_action(
  \'posts_orderby\',
  \'alter_order_wpse_117098\'
);
在有问题的查询之前添加该筛选器。它将自行删除,因此不应打乱任何其他查询。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post