如何在不对每个值进行新的数据库查询的情况下设置多个 Gravity Forms 值?

How can I set multiple Gravity Forms values without doing a new database query for each one?

我将用户信息存储在与我的 Wordpress 安装不同的数据库中。我正在编写一个查询此数据库并以比重形式预填充值的插件。

看起来下面的过滤器满足了我的需要:

add_filter("gform_field_value_$PARAMETER", "FUNCTION");

问题是我需要为每个参数值调用一个函数。这意味着我查询数据库中的每个值。

因此,如果我有八个预填值,数据库将被查询八次。这似乎效率低下。

有没有一种方法可以查询数据库一次,获取我需要的所有值,然后将变量传回过滤器?

这是我处理此问题的首选方法。将您的代码包装在 class 中,并将您的查询结果存储在该 class 中的一个变量中。然后您可以检查该变量是否已经包含数据,如果是,只需 return 已经检索到数据而不是再次查询数据库。

class My_GF_Field_Values {

    var $data = null;

    function __construct() {

        add_filter( 'gform_field_value_param1', array( $this, 'func1' ) );
        add_filter( 'gform_field_value_param2', array( $this, 'func2' ) );

    }

    function func1() {

        $data = $this->get_data();

        return $data['param1'];
    }

    function func2() {

        $data = $this->get_data();

        return $data['param2'];
    }

    function get_data() {

        if( $this->data == null ) {
            $this->data = array(); // actually do your query and get the data
        }

        return $this->data;
    }

}