如何在执行完所有查询后获取结果?

时间:2016-10-14 作者:Thamaraiselvam

我需要在执行后获取查询结果

    add_filter(\'query\', \'query_recorder_wrapper_wptc\');
我使用query 筛选以获取执行前的所有查询,我还希望在执行后获取。我找遍了这个。

有没有hooks 还是脚本?

谢谢

2 个回复
SO网友:birgire

扩展wpdb 我们可以创建db.php 文件位于wp-content/ 要覆盖的目录wpdb 根据我们的需要上课。

我在这个网站上查看了这样的例子,并找到了一个@markkaplen的例子here.

下面是一个示例,您可以在每次查询运行后访问上一个结果:

<?php
/**
 * db.php - Override the global $wpdb object to collect all query results
 */
namespace WPSE\\Question242685;

class DB extends \\wpdb
{
    public function __construct( $dbuser, $dbpassword, $dbname, $dbhost )
    {
        // Parent constructor
        parent::__construct( $dbuser, $dbpassword, $dbname, $dbhost );
    }

    public function query( $query )
    {
        // Parent query
        $val = parent::query( $query );

        //----------------------------------------------------------------------
        // Edit this to your needs
        //
        // Warning: It can be slow and resource demanding to collect all results 
        if ( defined( \'SAVEQUERIES\' ) && SAVEQUERIES )
        {
            // do something with $this->last_result;
        }
        //----------------------------------------------------------------------

        return $val;
    }

} // end class

// Override the global wpdb object
$GLOBALS[\'wpdb\'] = new DB( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST );
这里我们假设SAVEQUERIES 定义为truewp-config.php 文件

Note 收集所有结果可能需要大量的资源,因此您最好只在dev安装上进行测试。

SO网友:stims

您可以使用wp 使用全局变量的操作$wp_query, 像这样:

function all_queried_items(){

    global $wp_query;

    $all_queried_posts = $wp_query->posts;

}

add_action(\'wp\', \'all_queried_items\');