OrderBy查询函数,如get_posts()
, query_posts()
呼叫anew WP_Query
里面——它们只是包装纸。
更重要的是class WP_Query
. 特别是内部WP_Query -> get_posts()
. 当您添加orderby
参数,则发生以下情况:
WP检查是否已设置。如果不是,则使用$wpdb->posts.post_date
并将`顺序值附加到它如果将其设置为\'none\'
, 然后没有应用顺序在其他情况下,将使用顺序But... 有“允许的orderby”值:
$allowed_keys = array(\'name\', \'author\', \'date\', \'title\', \'modified\', \'menu_order\', \'parent\', \'ID\', \'rand\', \'comment_count\');
对于元键/值对,有一种特殊情况:如果元键不为空,则
meta_key
值添加到允许的键,以及
meta_value
和
meta_value_num
.
函数,然后分解orderby
字符串到数组并循环。匹配的所有内容都将添加到一个新数组中,该数组在循环后内爆(用逗号分隔),并添加到SQL查询字符串中。如果生成的数组为空,则"$wpdb->posts.post_date"
然后是order
将采取行动。如果它也是空的,那么您将看到与none
.
因此,如果要添加元键和元值之类的内容,则应将以下内容添加到查询中:
"$wpdb->postmeta.meta_value,$wpdb->postmeta.meta_value,$wpdb->posts.post_title"
将您的帖子类型参数添加到
WHERE
条款如下:
AND $wpdb->posts.post_type = \'portfolio-item\'
我认为这里有什么不对的地方:你不能添加
asc desc
像
order
陈述订单
must be 任何一个
ASC
or DESC
(大写/小写无关紧要)。这行不通,可能会破裂我很肯定
\'portfolio-item\'
不是实际的帖子类型名称。我想只是
portfolio
. 确保调用内部命名的任何post类型
var_dump( array_keys( (array) $GLOBALS[\'wp_post_types\'] ) );
caller_get_posts
是3.1之前的参数。您应该已经在代码的顶部/开头有一个注释,如下所示_deprecated_argument()
在生成任何查询字符串之前调用:"caller_get_posts" is deprecated. Use "ignore_sticky_posts" instead.