有一些事情需要考虑:
1准备查询并使用正确的前缀
这可以防止大多数尝试向DB中注入某些内容。
只需使用$wpdb->tablename
. 在你的情况下$wpdb->posts
. 您可能知道,可以添加一个名为$table_prefix
到您的wp-config.php
-文件因此,如果您有一个自定义表,您应该使用{$wpdb->prefix}table_name
.
然后使用prepare()
- 你几乎可以在这里阅读每一个问答。该功能的工作原理类似于printf/sprintf()
在“普通”PHP中使用%s
替换字符串和%d
替换数字(int)。
$results = $wpdb->get_result( $wpdb->prepare(
"
SELECT meta_value AS autor
FROM $wpdb->posts, $wpdb->postmeta
WHERE post_status = \'publish\'
AND meta_key = \'%s\'
GROUP BY meta_value
ORDER BY meta_value
DESC
"
,\'autor\'
) );
使用适当的内部API一方面
meta-query (读入此存档)。
您可以使用以下筛选器pre_get_posts
到$query->set( \'key\', \'value\' )
用于主查询和其他筛选器的对,如posts_clauses
或“较小”posts_orderby
截取查询字符串。
可用于检查查询的最后一个过滤器是post_results
过滤器对结果数据进行一些操作/解析。
你可以阅读more about it 在这个答案中。
3rd不要查询是否有模板标签来为您完成这项工作
另一方面,还有如下功能