2016-11-28 75 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

這樣做總的意義。感謝您的幫助! –