只提取“当前”wp_post的SQL查询?

时间:2011-09-14 作者:John Mee

wp\\u posts表似乎保留了相同的、非常相似但可能不同的所有修订,posts/page/whatever。

我有点熟悉SQL,但不熟悉WordPress。我只需要提取那些将出现在面向公众的网站上的记录;因此,只有最新的修订,而不是所有被替代的行。不确定如何筛选字段。显然,还有比以下更复杂的事情:

select *
from wp_posts
where post_status in (\'publish\',\'revision\')
order by post_modified desc
其中有“重复项”,似乎遗漏了一些内容。

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

使用API函数时,更容易看到WordPress查询的确切内容,而不是从头开始构造查询:

get_posts(array(
             \'numberposts\' => -1,
         ));

var_dump( $wpdb->last_query );
提供以下SQL:

SELECT wp_posts.* FROM wp_posts 
WHERE 1=1 
AND wp_posts.post_type = \'post\' 
AND (wp_posts.post_status = \'publish\')
ORDER BY wp_posts.post_date DESC

SO网友:Brian Fegter

您应该在Wordpress执行重载操作时使用此选项:

$args = array(
    \'showposts\' => 10,
);
$posts = query_posts();
var_dump($posts);
您将了解有关向query\\u帖子添加参数的详细信息http://codex.wordpress.org/Class_Reference/WP_Query

创建手动MYSQL查询时,还应该使用Wordpress数据库类。您可以在此处了解更多信息:http://codex.wordpress.org/Class_Reference/wpdb Wordpress还包括一个很好的函数,用于转义查询中的数据以确保操作安全:esc\\u sql($string);

您可以像这样使用Wordpress db类:

global $wpdb;
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE $wpdb->posts.post_status = \'publish\'");
在表名前面使用$wpdb->作为指定的数据库前缀。这很重要,因为您可以在一个数据库中使用表前缀安装多个Wordpress$wpdb->将获取正确的前缀上下文。

结束

相关推荐

WordPress MultiSite是否使用单独的MySQL数据库?

我这样问是因为我无法从我在第二个博客上创建的插件中找到选项。将此插件添加到主站点并显示选项。我很困惑,因为在wp_options 桌子blog_id 我希望那里会有不止一个值。