En kunde ønskede at modtage henvendelser gennem en kontaktform. Først forsøgte jeg at bruge det, der var indbygget i temaet, men det var begrænset i muligheder for noget så simpelt som at give input-felter unikke ID’er og klasser. Derfor var min første indskydelse at gå videre til at bruge Contact Form 7. Det gav også nogle hovedbrud, men jeg kom i mål med det og fik lavet en løsning, der fungerer godt.
Løsningen
Til en løsning med fortløbende numre giver det mening at gemme det fortløbende tal i options-tabellen. I dette eksempel bruger jeg key i tabellen: running_num.
Man kan hente det fortløbende nummer ind i et hidden input-felt i formularen. Men det kan give det problem at flere har formularen åbnet på samme tid, så det samme nummer hentes ind. I det øjeblik mailen så bliver sendt vil det samme forløbende nummer blive tilknyttet flere emails, hvis det forløbende nummer skal sendes med i mailen. Derfor laver jeg her løsningen, så senneste fortløbende nummer først bliver hentet fra options-tabellen i det øjeblik formularen bliver sendt.
I formularen er der oprettet et hidden felt. Det er dette felt, der bruges til at indsætte data i, men altså først når en mail bliver sendt afsted. Feltet har i CF7 referencen “request-order”.
<label>
[hidden request-order] </label>
For at behandle data i formularen efter, der er klikket send, men før mailen bliver sendt afsted bruger jeg hooket wpcf7_posted_data.
<?php
/**
* @param array $array Array of data posted in form
*/
function alter_posted_data ( $array ) {
$running_number = get_option( 'running_num' );
/**
* check if value is set in options table
* if not starting from 1
*/
if ( !$running_number ) {
$running_number = 1;
update_option( 'running_num', $running_number );
}
/**
* value from CF7 field request-order
*/
$array[ 'request-order' ] = $running_number;
return $array;
}
add_filter( 'wpcf7_posted_data', 'alter_posted_data', 10, 1 );
Sidste del er at sørge for, at tallet i options-tabellen tæller op når der er sendt en mail. Her brugeres hooket wpcf7_mail_sent
<?php
function count_on_mail_sent () {
$running_number = get_option( 'running_num' );
$running_number++;
update_option( 'running_num', $running_number );
}
add_filter( 'wpcf7_mail_sent', 'count_on_mail_sent' );