2017-03-13 8 views
0

Ich versuche, das CF7-Plugin durch ihre Form-Tag-Filter zu erweitern, um meine Bedürfnisse zu erfüllen, aber ich habe in einem seltsamen Fall gelandet. Ich habe die folgende Funktion (In meiner Theme Funktion Datei), die etwas funktioniert:CF7 Dynamisch Formulardaten ändern

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); 

Auf der Contact Form 7 Seite habe ich die folgenden Felder:

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

Jeder dieser Textfelder ist korrekt aktualisiert von der obigen Funktion, außer für das Telefonfeld. Ich habe versucht, dieses Feld zu Tel, Nummer, Textbereich, versteckt, vergeblich zu wechseln. Es ruft nur den Wert nicht ab, aber wenn ich durch irgendeine Schnur (die keine Zahlen hat) ersetze, würde es funktionieren. Wenn ich irgendwelche Ziffern einfüge, nimmt es nicht mehr oder praktisch nur die Ziffern heraus und hinterlässt die Buchstaben.

Denken Sie daran, dass nicht das Problem ist, weil es durch eine beliebige Zahl in Anführungszeichen ersetzt werden kann und die Ausgabe bleibt gleich.

Etwas seltsam zu beachten ist, dass wenn ich die $tag Array innerhalb des if-Anweisung als solche auszudrucken waren: zweimal, zuerst mit den richtig eingesetzten Telefon Werte

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>'; 
      } 

Es würde die $tag Array drucken (dh Raw_Values, Werte und Labels sind alle auf '1234567890' gesetzt, gefolgt von einem erneuten Aufruf mit allen auf Null gesetzten Werten.

Ich bin etwas davon überzeugt, dass sie eine Art Regex-Reiniger innerhalb des Plugin-Codes für Ziffern aus irgendeinem Grund haben, aber ich kann es nicht finden oder einen Weg finden, um dies zu beheben.

Jede Hilfe wird sehr geschätzt.

EDIT:

Es scheint, dass, wenn ich $formidable_array[135] mit folgenden ersetzen:

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

Es funktioniert ... Lassen Sie sich nicht, warum aber, weil $ formidable_array [135] das gleiche gilt Wert, wenn stattdessen echo.

EDIT:

ich brauche, um herauszufinden, was meine Funktion ein 2. Mal ruft, tut ein var_dump() auf meinem $formidable_array(135) machte mich entdecken, dass das zweite Mal, dass Variable ausgedruckt wird, ist es NULL ist. Also wird der "wpcf7_form_tag" Hook zweimal ausgeführt ??

Antwort

0

Der Haken "wpcf7_form_tag" wird nicht zweimal ausgeführt, aber CF7 erkennt jeden Feldnamen zweimal, nicht sicher warum. Aber das war nicht die Ursache für die NULL-Werte ...

Die Telefonnummer war nicht das einzige, was zu NULL wurde, mein ganzes formidable Array wurde NULL.

Mein Problem hängt damit zusammen, wie ich meine beeindruckenden Werte aus der Datenbank erhalten habe. Ich habe jedes Mal, wenn meine Funktion ausgeführt wurde, eine neue DB-Verbindung erstellt, was ein großes NoNo war. Habe gerade meine externe DB-Verbindung global gemacht und das Problem ist verschwunden.

Ich denke, es war ein Geschwindigkeitsproblem, da es zwei Funktionen gab, die versuchen, die gleiche Datenbanktabelle abzufragen.