获取GET_POSTS()生成的确切SQL查询

时间:2019-07-22 作者:user6329530

我正在开发一个WordPress,它是由其他人启动然后消失的。她使用不同的插件创建了一些自定义内容类型和变量,现在我想访问她为模板创建的函数中的数据集。

$args = array(
                \'suppress_filters\' => 0,
                \'posts_per_page\' => -1,
                \'sort_order\' => \'ASC\',
                \'sort_column\' => \'post_title\',
                \'post_type\' => \'inst\',
                \'post_status\' => \'publish\'
);
$content = get_posts($args);
我一直在四处寻找,不同的发现建议使用以下变量来使用SQL:

echo $GLOBALS[\'wp_query\']->request;
但是,它返回的不是显示页面上显示的post数据的查询。当我直接在MySQL中运行时,它只返回1个结果,我想这就是整个页面?因为我定义了两个数据集,页面上出现了两个字段,但查询中只有一行,上面的一行会回显。

我需要知道WP_Query 对象位于$content中,但var_dump($content) 也不包含我定义的字段。我需要获取内容排版中的图像,但我只能获取访问集的名称$content->post_title.

有没有办法深入了解get_posts() 从数据库中获取,以及如何访问所需的属性?

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

这个get_posts() 函数在函数内创建WP\\u Query的实例,并简单地返回结果数组。此WP\\U查询实例不会覆盖global $wp_query 并且在您需要它的时候超出了范围。简而言之,我看不出有什么方法可以通过get_posts().

另一种方法是简单地创建自己的WP\\u查询实例并传递get_posts() 它的参数:

$query = new WP_Query( array(
    \'post_type\'         => \'inst\',
    \'post_status\'       => \'publish\'
    \'posts_per_page\'    => -1,
    \'order\'             => \'ASC\',           // sort_order
    \'orderby\'           => \'post_title\',    // sort_column
) );
这将为您提供整个WP\\U查询对象,您可以在其中输出SQL:

$query_sql = $query->request;
最后,如果您已经在创建WP\\u查询,则不需要get_posts() 在那一点上打电话。

if( $query->have_posts() ) {

    while( $query->have_posts() ) {

        $query->the_post();
        the_content();

    }

    // Reset the global $wp_query to what it was originally.
    wp_reset_postdata();
}

SO网友:Aurovrata

有一种方法可以使用“query”获取由get\\u posts()函数生成的SQL查询filter (由于您没有在查询中抑制过滤器,因此钩子将在执行最终SQL查询之前激发,

add_filter(\'query\', \'get_sql\');
function get_sql($query){
  //check if this is your query,
  if(strpos($query, "\'inst\'")>0){
    //this is your query....print it to your log file to debug it.
    error_log($query);
  }
  return $query;
}

相关推荐

使用SQL将帖子批量分配到类别(MySQL)

我正在将wordpress站点从QTranslate-X迁移到WPML(2个多语言插件)。在迁移过程中,我所有属于给定类别(英语中为Health,法语中为sain)的帖子都正确地用英语分配,但法语中的链接丢失了。我编写了一个SQL脚本,从属于健康类别的英语帖子中确定法语帖子ID的列表。这给了我一个ID列表(101102…)。然后,我继续运行以下INSERT语句(第一个数字是对象ID,也称为post ID,第二个数字是类别ID,最后一个数字是给定对象的顺序)。这一点描述得很好here:INSERT INTO