2017-03-13 65 views
0

我想通過他們的表單標記過濾器來擴展CF7插件來滿足我的需求,但是我遇到了一個奇怪的情況。我有以下功能(在我的主題函數文件),有些作品:CF7動態更改表單數據

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的一面,我有以下字段:

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

這些文本字段中的每一個是通過上述功能正確更新,除了手機領域。我嘗試將該字段切換到電話,號碼,文本區域,隱藏,無濟於事。它只是不檢索值,但如果我用任何字符串(沒有數字)替換$formidable_array[135]它將工作。如果我輸入任何數字,它不再或實際上只是拿出數字並留下字母。

請記住$formidable_array[135]不是問題,因爲它可以被引號內的任何數字替換,並且輸出保持不變。

奇怪的事情需要注意的是,如果我是打印出來的if語句中的$tag陣列這樣:

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陣列兩次,第一次與正確插入手機值(即所有設置爲'1234567890'的raw_values,值和標籤),然後重新發布,所有值都設置爲null。

我有點深信,他們在插件代碼中爲某些數字出現了某種正則表達式,因爲任何原因,但我無法找到它或找出解決此問題的方法。

任何幫助,非常感謝。

編輯:

看來,如果我用下面的替換$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而不是。

編輯:

我需要弄清楚發生了什麼叫我的功能的第二次,做我的$formidable_array(135)一個var_dump()讓我發現,這個變量打印出來的第二次,它是NULL。那麼「wpcf7_form_tag」鉤子會執行兩次?

回答

0

「wpcf7_form_tag」掛鉤沒有執行兩次,但CF7檢測到每個字段名稱兩次,不知道爲什麼。但這不是最終產生NULL值的原因...

電話號碼不是唯一變成了NULL的東西,我整個強大的數組變成了NULL。

我的問題與我從數據庫中獲得強大值的方式有關。我每次運行函數時都會創建一個新的數據庫連接,這是一個很大的NoNo。只是將我的外部數據庫連接設置爲全局連接,問題消失了。

我認爲這是一個速度問題,因爲有兩個函數試圖查詢同一個數據庫表。