2016-11-28 10 views
1

いくつかの重力フォームフィールドにコンテンツを入力するPHP whileループをWordPressに作成しようとしています。私はこのように、whileループ内で関数を作成するためにeval()を使用しようとし、コンテンツを取得するためにリピータ分野で高度なカスタムフィールドを使用しています: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 

(私は取得していますこれらの倍数、当然の、および$の短縮名変数の1つは、「テスト」です。)

しかし、私は「リターン$イメージ」を変更していた場合"test"を返す "、エラーメッセージは表示されず、すべてが正しく実行されるので、関数sが作成されます。

私は間違っていますか?

ありがとうございます!

+1

'、 'populate_'を変更してみませんか? $ショートネーム。閉鎖に '_img'? '、function($ value){return $ image});' Btw、あなたは '$ image'を返しています。これはその関数のスコープでは定義されていません。 –

+0

add_filterで使用されている名前と同じ名前でなければならないので、それとも、私は何かを逃していますか? –

答えて

1

注文を変更してください...あなたの評価は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

それは全然意味をなさない。助けてくれてありがとう! –

関連する問題