Kunden haben häufig Sonderwünsche, gerade was Formulare angeht. Die Aufgabenstellung war es ein Contact Form 7 Formular um eine Funktion zu erweitern, die bei einer Checkbox-Auswahl entsprechende Download-Links in der Response-Mail setzt.

Der Hook: wpcf7_before_send_mail

Contact Form 7 bietet hier diverse Hooks an. Der ‘wpcf7_before_send_mail’-Hook biete sich hier für eine Erweiterung an. Nun könnte man eine ‘add_action’ in die functions.php des Themes legen, ist aber aus mehreren Gründen unpraktikabel. Besser ist es diesen Hook mittels eigenem Plugin zu setzen. Wenn ein Fehler im Plugin auftritt, ist nicht die ganze Installation gefährdet, sondern nur das betreffende Plugin. Dieses wird dann auch von WordPress garnicht erst geladen.

Das Formular

Ziel ist es ein Formular mit Auswahl-Plugin wie folgendes zu erstellen:

Dieses Formular ist voll funktionsfähig und sendet Links zu den ausgewählten PDFs.



Anwender Manual
Technische Referenz
FAQ


Bitte beweisen Sie ein Mensch zu sein und wählen Sie den Schlüssel aus.

Die Auswahl im Formular sind Checkboxen mit den Namen ‘down1’, ‘down2’ und ‘down3’. Dies kann man natürlich erweitern. Nach der Installation des Plugins kann man bei der Response Mail (MAIL2) dann den Tag [LINKS] einsetzen. Dieser wird dann mit den ausgewählten Einträgen ersetzt.

Das Plugin

In der Funktion ‘wpcf7_add_text_to_mail_body’ wird zu nächst die Submission des Formulars abgefangen und überprüft ob die entsprechenden Checkboxen ausgewählt waren. Dann werden die Links im Body-text an der Stelle [LINKS] ausgetauscht. Danach wird das Submission-Array an Contact Form 7 zurückgegeben.

Hier der vollständige Code des Plugins:

< ?php /** * Plugin Name: FXX Contact Form 7 Addon * Plugin URI: https://www.franxx.com * Description: * Author: Frank Hübsch * Author URI: https://www.franxx.com * Version: 1.0.0 * * @package */ defined( 'ABSPATH' ) or die( 'Are you ok?' ); $start_fxx_cf7_addon = new Cf7Addon(); class Cf7Addon{ public function __construct() { add_action( 'wpcf7_before_send_mail' , array($this,'wpcf7_add_text_to_mail_body') ); } public function wpcf7_add_text_to_mail_body($contact_form){ $upload = wp_upload_dir(); $upload_dir = $upload['basedir']; $submission = WPCF7_Submission::get_instance(); $body =""; if($submission) { $posted_data = $submission->get_posted_data(); foreach ($posted_data as $keyval => $posted) { if($keyval=='down1'&& $posted[0]!==''){ $body .= "Download: https://www.franxx.com/wp-content/uploads/2019/08/erstes.pdf"."\r\n"; } if($keyval=='down2'&& $posted[0]!==''){ $body .= "Download: https://www.franxx.com/wp-content/uploads/2019/08/zweites.pdf"."\r\n"; } if($keyval=='down3'&& $posted[0]!==''){ $body .= "Download: https://www.franxx.com/wp-content/uploads/2019/08/drittes.pdf"."\r\n"; } } $mailProp = $contact_form->get_properties('mail'); //parse Mailbody $mailBody = $mailProp['mail_2']['body']; // replace tag with links $mailBody = str_replace('[LINKS]',$body,$mailBody); // set new mail body $mailProp['mail_2']['body'] = $mailBody; // update the form properties $contact_form->set_properties(array('mail_2' => $mailProp['mail_2'])); } } }

Der Code ist noch sehr rudimentär. Die Bedienung für Redakteure nicht unbedingt geeignet. In weiteren Beiträgen versuche ich die Funktionalität und den Komfort weiter auszubauen. Vorstellbar wäre zum Beispiel einige Einstellungen im Response-Body unterzubringen.