Manipulace s údaji v Contact Form 7 před a po odeslání

„WordPress Contact Form 7 Hook Unofficial Developer Documentation and Examples »“:http://xaviesteve.com/3298/wordpress-contact-form-7-hook-unofficial-developer-documentation-and-examples/

„Changing Form Data Before it is Saved »“:http://cfdbplugin.com/?page_id=747

„Contact Form 7 – form submit change field value »“:https://wordpress.org/support/topic/form-submit-change-field-value

„How to create a mail counter for Contact Form 7 »“:http://sevenspark.com/tutorials/how-to-create-a-counter-for-contact-form-7

„Extending the Contact Form 7 Plugin »“:http://kovshenin.com/2010/wordpress-extending-the-contact-form-7-plugin/

[private]

/—code php

### příklad použitý na http://u904.cz/mimoradna-nabidka-lifebook-a512/
### pocitadlo objednavek odeslanych z CF7

// Define the key to store in the database
define(‚CF7_COUNTER‘, ‚cf7-counter‘);
define(‚CF7_LASTORD‘, ‚cf7-lastord‘);
define(‚POCNAB‘, ‚200‘); // startovni pocet kusu

### Create the shortcode which will read the value from db option
function cf7db_reader(){
$val = get_option(CF7_COUNTER, POCNAB); // kdyz neexistuje option v db, vrati startovni pocet
return $val;
}
add_shortcode(‚CF7_show‘, ‚cf7db_reader‘);

### Action performed BEFORE the mail is sent by CF7
function wpcf7_change_mail($form) {
$formid = $form->id; // gets current form id
if ($formid == ‚384‘) {
$wpcf7 = WPCF7_ContactForm::get_current(); // get current FORM instance
$wpcf7data = WPCF7_Submission::get_instance(); // // get current SUBMISSION instance
if ($wpcf7data) {
$formData = $wpcf7data->get_posted_data();
}
// Reading a posted value in the form with PHP
$poc = $formData[‚pocet‘]; // nacte hodnotu z prave odeslaneho formulare
$val = get_option(CF7_COUNTER, POCNAB); // nacte aktualni hodnotu skladu, kdyz neexistuje option v db, vytvori a naplni ji startovnim poctem objednavku.

// nahrada dat v mailu
$mail = $wpcf7->prop(‚mail‘);

if($poc > $val): // objednano vic kusu, nez je na sklade, nahradim REPLACER textem
$mail[‚pocet‘] = $val; // snizim objednany pocet
// doplnim upozorneni do mailu
// Find/replace the „special“ tag as defined in your CF7 email body
$mail[‚body‘] = str_replace(‚REPLACER‘, „Jelikož jste objednali větší počet („.$poc.“ ks), než bylo aktuálně k dispozici skladem („.$val.“ ks), bude objednaný počet snížen na dostupné množství.\n“, $mail[‚body‘]);
else: // odstrani REPLACER string
$mail[‚body‘] = str_replace(‚REPLACER‘, „“, $mail[‚body‘]);
endif;

// Save the email body
$wpcf7->set_properties(array(„mail“ => $mail));

// return current cf7 instance
return $wpcf7;
}
}
add_action(‚wpcf7_before_send_mail‘, ‚wpcf7_change_mail‘);

### Action performed WHEN the mail is sent by CF7
function cf7_decrement_order_counter($form){
$formid = $form->id; // gets current form id
if ($formid == ‚384‘) {
// $wpcf7 = WPCF7_ContactForm::get_current(); // get current FORM instance
$wpcf7data = WPCF7_Submission::get_instance(); // // get current SUBMISSION instance
if ($wpcf7data) {
$formData = $wpcf7data->get_posted_data();
}
$poc = $formData[‚pocet‘]; // nacte hodnotu z prave odeslaneho formulare
$val = get_option(CF7_COUNTER, POCNAB) – $poc; // kdyz neexistuje option v db, vytvori a naplni ji startovnim poctem snizenym o odeslanou objednavku.
update_option(CF7_COUNTER, $val); // Update the settings with the new count
update_option(CF7_LASTORD, $poc); // Update the settings with the new count
}
}
add_action(‚wpcf7_mail_sent‘, ‚cf7_decrement_order_counter‘);

### zmena poctu objednanych kusu v databazi odeslanych formularu (Contact Form DB)
function change_cfdb_value($formData){
$formName = ‚A514‘;
if ($formData && $formName == $formData->title) {
$poc = $formData->posted_data[‚pocet‘];
$val = get_option(CF7_COUNTER, POCNAB);
if($poc > $val): // objednano vic kusu, nez je na sklade
$formData->posted_data[‚dodavka‘] = $val;
else:
$formData->posted_data[‚dodavka‘] = $poc;
endif;
}
return $formData;
}
add_filter(‚cfdb_form_data‘, ‚change_cfdb_value‘);

### Change content of Ordering Page
function formRemover($content) {
if(!is_feed() && !is_admin() && is_page(381)) {
$val = get_option(CF7_COUNTER);
if($val == 0):
$content = str_replace(‚

Tak neváhejte!

‚, ‚

Prodej byl ukončen.

‚, $content);
else:
$content = str_replace(‚

‚, ‚

Objednávkový formulář

Chyba: Kontaktní formulář nebyl nalezen.

‚, $content);
endif;
}
return $content;
}
add_filter (‚the_content‘, ‚formRemover‘);

### Change content of Thank You Page
function orderAlert($content) {
if(!is_feed() && !is_admin() && is_page(385)) {
$val = get_option(CF7_COUNTER, POCNAB);
$poc = get_option(CF7_LASTORD, 0);
$roz = $poc-$val;
if($val <= 0): $content = str_replace('REPLACER', '

Díky za objednávku.

Jelikož jste objednali větší počet kusů, než bylo aktuálně k dispozici skladem, byl Vámi objednaný počet snížen.

Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.

‚, $content);
update_option(CF7_COUNTER, 0); // vynulovani pocitadla
update_option(CF7_LASTORD, 0); // vynulovani pocitadla
else:
$content = str_replace(‚REPLACER‘, ‚

Díky za objednávku.

Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.

‚, $content);
endif;
}
return $content;
}
add_filter (‚the_content‘, ‚orderAlert‘);

### pridani odkazu na blog page k excerptum
function excerpt_read_more_link($output) {
global $post;
return $output . ‚Chyba: Kontaktní formulář nebyl nalezen.

‚, $content);
endif;
}
return $content;
}
add_filter (‚the_content‘, ‚formRemover‘);

### Change content of Thank You Page
function orderAlert($content) {
if(!is_feed() && !is_admin() && is_page(72)) {
$val = get_option(CF7_COUNTER, POCNAB);
$poc = get_option(CF7_LASTORD, 0);
$roz = $poc-$val;
if($val <= 0): $content = str_replace('REPLACER', '

Díky za objednávku.

Jelikož jste objednali větší počet kusů, než bylo aktuálně k dispozici skladem, byl Vámi objednaný počet snížen.

Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.

‚, $content);
update_option(CF7_COUNTER, 0); // vynulovani pocitadla
update_option(CF7_LASTORD, 0); // vynulovani pocitadla
else:
$content = str_replace(‚REPLACER‘, ‚

Díky za objednávku.

Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.

‚, $content);
endif;
}
return $content;
}
add_filter (‚the_content‘, ‚orderAlert‘);
\—

[/private]

Ve verzi CF7 4 a vyšší se způsob přebírání dat z formuláře změnil:
/—code php
/* WPCF7_ContactForm object no longer has a posted_data property. */
$posted_data = $contact_form->posted_data; // Tohle už nefunguje

/* Use WPCF7_Submission object’s get_posted_data() method to get it. */
$submission = WPCF7_Submission::get_instance();

if ( $submission ) {
$posted_data = $submission->get_posted_data();
}
\—