这种类型的工作对我来说是新的,所以如果答案很简单,请耐心等待。
我在我的网站上使用Wordpress和Gravity Forms,我想用一个对象的数据预先填充表单(该对象来自API,所以我不能只使用wordpress current_user对象)。
如何在wordpress过滤器中使用外部变量?
例如:
$fname = $object->first_name;
add_filter('gform_field_value_firstname', *Populate the field with $fname*);
以下是该功能的正常用法,来自Gravity Forms Docs(http://www.gravityhelp.com/documentation/page/Gform_field_value_$parameter_name)
add_filter('gform_field_value_firstname', "dothis");
在哪里" dothis"指向一个功能。
以下内容也适用(基于这篇优秀的文章:http://www.doitwithwp.com/pre-populate-fields-using-gravity-forms/):
add_filter('gform_field_value_firstname', create_function("", 'return "John";' ));
但是,我也无法弄清楚如何让它接受外部变量。例如,我想做:
$fname = $object->first_name;
add_filter('gform_field_value_firstname', create_function("", 'return $fname;' ));
但是php告诉我fname是一个未定义的变量。
我已经审核了这个帖子PHP: How to make variable visible in create_function()?,但我无法让Closure解决方案正常工作。我有PHP版本5.2.17。
请您发布一个如何正确执行此操作的示例吗?
答案 0 :(得分:1)
将$fname
设为全局变量,您可以在create_function
中将其作为全局变量引用。
global $fname = $object->first_name;
add_filter( 'gform_field_value_firstname', create_function( '', 'global $fname; return $fname;' ) );
但是,如果要返回多个值,那么使$ object global更好:
global $object;
add_filter( 'gform_field_value_firstname', create_function( '', 'global $object; return
$object->first_name;' ));
add_filter( 'gform_field_value_lastname', create_function( '', 'global $object; return $object->last_name;' ));
等等......