乌徒帮技术范WordPressWordPress使用 › 解决wordpress3.5.2中orderby=meta_value失效办法

解决wordpress3.5.2中orderby=meta_value失效办法

分类:WordPress使用

wordpress3.5.2是目前中文版本中最高版本,但升级到这个版本之后,出现了一个新的BUG,即我们在开发中,如果使用query_posts函数来获取特定的文章时,orderby=meta_value可能面临失效的状况。

首先,需要对此作出解释,否子戈开发三年wordpress,应该不会对orderby=meta_value的使用存在使用不当的问题,而且我之所以发现这个BUG,也是因为之前开发好的一段挑选程序在升级后失效。

我通过print_r($wp_query)之后,发现requst中的sql语句并没有按照query中的配置来进行调整,即使使用order,也可能面临问题。当然,产生这个问题的原因可能很多,首先有可能是wordpress升级之后,系统内部错了问题,但如果是这样,这个BUG应该会有人报告,但我到目前没有发现;其次也有可能是否子戈开发过程中增加了新的钩子,造成了这个问题,但问题是,否子戈升级之前的程序运行良好,为何升级之后马上就不能使用?当然,还有一种可能,即升级之前其他的钩子程序在升级之后产生的干扰导致这个问题。

下面是我解决该问题的方法,我使用了posts_orderby这个钩子,即在query_posts之前,使用下面这段代码来进行调整,以达到跟原来一模一样的效果。

add_filter('posts_orderby', 'edit_posts_orderby');
function edit_posts_orderby($orderby_statement){
	global $wpdb;
	$orderby_statement = "$wpdb->postmeta.meta_value+0 DESC";
	return $orderby_statement;
}

需要提醒的有两点:1、使用这段代码,无须一定要在functions.php中,只需要在每个query_posts之前即可;2、$wpdb->postmeta.meta_value+0中的+0是为了将这个值转换为数值类型,如果不加+0,那么这个排序会按照字符串对应的编码值来排序,达不到我们要的效果。

经过多次测试,发现这个问题存在于我从5.1升级到5.2的博客中,不知道其他博客有没有这个情况。更为奇怪的是,并非只有orderby=meta_value出现这个问题,所有的orderby都失效了,都得靠本文的方法加以实现。

已有1条评论 快速评论
  1. 搁浅 #4294楼 2014/03/24 20:50:11 回复

    遇到同样的问题,用你的方法顺利的解决了,十分感谢!!!

填写个人信息,赶快回复吧!