如何在不对每个值进行新的数据库查询的情况下设置多个 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;
}
}
我将用户信息存储在与我的 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;
}
}