@@ -2033,6 +2033,7 @@
if ( !empty($q['meta_key']) ) {
$allowed_keys[] = $q['meta_key'];
$allowed_keys[] = 'meta_value';
+ $allowed_keys[] = 'meta_value_num';
}
$q['orderby'] = urldecode($q['orderby']);
$q['orderby'] = addslashes_gpc($q['orderby']);
@@ -2056,6 +2057,9 @@
case 'meta_value':
$orderby = "$wpdb->postmeta.meta_value";
break;
+ case 'meta_value_num':
+ $orderby = "$wpdb->postmeta.meta_value+0";
+ break;
default:
$orderby = "$wpdb->posts.post_" . $orderby;
}
这是一个对核心文件/wp-includes/query.php的直接编辑。请注意,上面代码中的加号表示要添加的新行。
作者笔记
一位客户希望我设置一个名为“指南排名”的自定义字段,允许他们为他们发布的酒吧列表分配 1-20 号。
运行帖子查询后,我发现 meta_value 被视为字符串,因此排序顺序混乱。
例如:1、10、2、3css-tricks.comC 7、8、9
要让 WordPress/MySQL 使用“自然排序顺序”,您只需将 +0 应用于字段名称,它将被视为数字(例如:meta_value+0)。
为了不中断现有行为,我只添加了新的类型“meta_value_num”。
我的查询行现在看起来像这样
$guide_posts = new WP_Query("cat=12&meta_key=guide_rank&orderby=meta_value_num&order=ASC&showposts=10");
返回结果为:1、2、3、4、5、6、7、8、9、10
这将在 WordPress 主干中包含,因此希望一旦应用后,就不再需要手动编辑文件。
可能要看看这个
http://digwp.com/2009/09/look-ma-editable-text-regions/
查看如何处理过长的代码。
悬停时会展开 :)
更新:meta_sort_num 已提交到主干 http://core.trac.wordpress.org/changeset/13501
很快就不需要这种 hack 了 :)
如何在搜索或存档页面添加“排序帖子术语”?
例如:http://goo.gl/K9sXz
更多示例:http://goo.gl/SjYjs
评论最多的 | 最新的或按字母顺序
如何做到这一点?请帮我一下。
提前感谢 :)
谢谢
这段代码确实帮助我解决了我的问题。