我正在尝试为WordPress创建一个PHP while循环,将内容填充到某些Gravity Forms字段。我使用带有转发器字段的高级自定义字段来获取内容,然后尝试使用eval()在while循环内创建函数,如下所示:
if( have_rows( 'tickets', 'option' ) ) :
while( have_rows( 'tickets', 'option' ) ) : the_row();
$shortname = get_sub_field('short_name');
$image = get_sub_field('image');
add_filter( 'gform_field_value_' . $shortname . '_img', 'populate_' . $shortname . '_img' );
eval("
function populate_{$shortname}_img( $value ) {
return $image;
}
");
endwhile;
endif;
问题在于我收到此错误:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'populate_test_img' not found or invalid function name in /srv/www/nordstan/htdocs/wp-includes/plugin.php on line 235
(当然,我得到了这些的倍数,其中一个$ shortname变量是" test"。)
然而,如果我正在改变"返回$ image" to" return' test'",没有打印错误信息,整个过程都正确执行,所以创建了函数。
我做错了什么?
提前致谢!
答案 0 :(得分:1)
更改顺序...因为你的eval直到add_filter之后才运行,add_filter无法找到该函数(直到运行时才存在)。
$shortname = get_sub_field('short_name');
$image = get_sub_field('image');
eval("
function populate_{$shortname}_img( $value ) {
return '$image';
}
");
add_filter( 'gform_field_value_' . $shortname . '_img', 'populate_' . $shortname . '_img' );
还要注意$ image是一个字符串,需要在该eval'd代码的上下文中对其进行处理。