WordPress:函数内部while循环,变量名为

时间:2016-11-28 16:21:40

标签: php wordpress function while-loop

我正在尝试为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'",没有打印错误信息,整个过程都正确执行,所以创建了函数。

我做错了什么?

提前致谢!

1 个答案:

答案 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代码的上下文中对其进行处理。