2016-11-28 41 views
1

我想创建一个PHP的while循环为WordPress的内容填充到一些Gravityforms字段。我使用的是先进的自定义字段与中继器领域获得的内容,然后尝试使用eval()在while循环中创建函数,就像这样:WordPress的:功能里面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 

(我得到的这些倍数,当然,和$短名称的变量之一是“测试”。)

但是,如果我改变了“返回$图像”到“返回'测试'”,没有错误信息被打印,并且整个事情被正确执行,所以功能s被创建。

我在做什么错?

在此先感谢!

+1

为什么不只是改变','populate_'。 $短名称。 '_img''关闭? ',function($ value){return $ image});'顺便说一句,你要返回'$ image',它在该函数的作用域中是未定义的。 –

+0

因为它必须与add_filter中使用的名称相同?或者我错过了什么? –

回答

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

+0

这样做总的意义。感谢您的帮助! –