2017-03-13 11 views
0

私のニーズを満たすためにフォームタグフィルタでCF7プラグインを拡張しようとしていますが、私は奇妙なケースに遭遇しました。私はやや動作する(私のテーマ関数ファイルで)、以下の機能を持っている:CF7フォームデータを動的に変更する

[text user] 
[text display-name] 
[text email] 
[text phone] 
[text campaign] 

これらのテキストフィールドの各1です:

function custom_shortcode_handler($tag, $unused) { 
    $formidable_array = get_related_vars(array('type' => 'cf7')); 

    if ($tag[name] === 'user') { 
     $tag[raw_values][] = $user; 
     $tag[values][] = $user; 
     $tag[labels][] = $user; 
    } 
    if ($tag[name] === 'display-name') { 
     $tag[raw_values][] = $display_name; 
     $tag[values][] = $display_name; 
     $tag[labels][] = $display_name; 
    } 
    if ($tag[name] === 'email') { 
     $tag[raw_values][] = $formidable_array[139]; 
     $tag[values][] = $formidable_array[139]; 
     $tag[labels][] = $formidable_array[139]; 
     if (!empty($formidable_array[223])) { 
      $tag[raw_values][] = $formidable_array[139].', '.$formidable_array[298]; 
      $tag[values][] = $formidable_array[139].', '.$formidable_array[298]; 
      $tag[labels][] = $formidable_array[139].', '.$formidable_array[298]; 
     } 
    } 
    if ($tag[name] === 'phone') { 
     $tag[raw_values][] = $formidable_array[135]; 
     $tag[values][] = $formidable_array[135]; 
     $tag[labels][] = $formidable_array[135]; 
    } 
    if ($tag[name] === 'campaign') { 
     $tag[raw_values][] = $campaign_name; 
     $tag[values][] = $campaign_name; 
     $tag[labels][] = $campaign_name; 
    } 

    return $tag; 
} 
add_filter('wpcf7_form_tag', 'custom_shortcode_handler', 10, 2); 

をお問い合わせフォーム7側では、私は次のフィールドを持っています電話機のフィールドを除いて、上記の関数によって正しく更新されました。私はそのフィールドをtel、number、text area、hidden、no availに切り替えようとしました。単に値を取得しませんが、$formidable_array[135]を(数字のない)任意の文字列に置き換えても機能します。私が任意の数字を入力すると、それはもはや実際には数字を取り出して文字を残しません。

$formidable_array[135]は引用符内の任意の数字に置き換えることができ、出力は同じままであるため、問題はありません。

if ($tag[name] === 'phone') { 
       $tag[raw_values][] = $formidable_array[135]; 
       $tag[values][] = $formidable_array[135]; 
       $tag[labels][] = $formidable_array[135]; 
       echo '<pre>'; 
       print_r($tag); 
       echo '</pre>'; 
      } 

それは(最初に正しく挿入された携帯電話の値で、二回$tag配列を印刷します:注意すべき奇妙な

何かが私のようなif文の中$tag配列をプリントアウトした場合ということですraw_values、values、およびlabelはすべて '1234567890'に設定されています)、すべての値をnullに戻して再ポストします。

何らかの理由で何らかのRegexクリーナーがプラグインコード内にあると確信していますが、それを見つけることができず、解決方法を見つけられません。

ご迷惑をおかけして申し訳ありません。

EDIT:$ formidable_array [135]は同じを保持しているので、なぜかかわら取得しないでください...

if ($tag[name] === 'phone') { 
       $tag[raw_values][] = '123-123-1234'; 
       $tag[values][] = '123-123-1234'; 
       $tag[labels][] = '123-123-1234'; 
      } 

それは動作します:

は、私は次のように$formidable_array[135]を置き換える場合ようです代わりにecho'dの場合は値。

EDIT:

私は私の$formidable_array(135)var_dump()をやって、2回目の私の関数を呼び出しているものを把握する必要がありますが、私は変数がプリントアウトされていることを2回目は、それがNULLだことを発見しました。だから "wpcf7_form_tag"フックが2回実行されていますか?

答えて

0

"wpcf7_form_tag"フックは2回実行されていませんが、CF7は各フィールド名を2回検出しています。しかし、それは最終的にNULL値を持つための原因ではありませんでした...

電話番号はNULLになっていた唯一のものではなかった、私の恐ろしい配列全体がNULLになっていた。

私の問題は、私がデータベースから凄まじい値を得た方法に関連していました。関数が実行されるたびに新しいDB接続を作成していましたが、これは大きなNoNoでした。ちょうど私の外部DB接続をグローバルなものにして、問題は消えました。

同じデータベーステーブルをクエリしようとすると2つの機能があるため、速度の問題があったと思います。

関連する問題