search icon

Contact Form 7 med fortløbende numre

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

Skriv et svar

Verified by MonsterInsights