Manipulace s údaji v Contact Form 7 před a po odeslání
WordPress Contact Form 7 Hook Unofficial Developer Documentation and Examples »
Changing Form Data Before it is Saved »
Contact Form 7 – form submit change field value »
How to create a mail counter for Contact Form 7 »
Extending the Contact Form 7 Plugin »
[private]
### 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('<h3>Tak neváhejte!</h3>', '<h3>Prodej byl ukončen.</h3>', $content);
else:
$content = str_replace('</ul>', '</ul><h3>Objednávkový formulář</h3><h3></h3>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', '<h3>Díky za objednávku.</h3><p>Jelikož jste objednali <b>větší počet</b> kusů, než bylo aktuálně k dispozici skladem, byl Vámi objednaný počet <b>snížen</b>.</p><p>Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.</p>', $content);
update_option(CF7_COUNTER, 0); // vynulovani pocitadla
update_option(CF7_LASTORD, 0); // vynulovani pocitadla
else:
$content = str_replace('REPLACER', '<h3>Díky za objednávku.</h3><p>Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.</p>', $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 . '<a href="'. get_permalink($post->ID) . '"> Více »</a>';
}
add_filter('the_excerpt', 'excerpt_read_more_link');
#############################
#### ve starších verzích CF7
#############################
// Define the key to store in the database
define('CF7_COUNTER', 'cf7-counter');
define('CF7_LASTORD', 'cf7-lastord');
define('POCNAB', '260'); // 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($formData) {
$formName = 'A512';
if ($formData && $formName == $formData->title) {
// Reading a posted value in the form with PHP
$poc = $formData->posted_data['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.
$bod = $formData->mail['body'];
if($poc > $val): // objednano vic kusu, nez je na sklade, nahradim REPLACER textem
$formData->posted_data['pocet'] = $val; // snizim objednany pocet
// doplnim upozorneni do mailu
$bod = str_replace('REPLACER', "Jelikož jste objednali větší počet (".$poc." ks), než bylo aktuálně k dispozici skladem (".$val." ks), byl objednaný počet snížen na dostupné množství.\n", $bod);
$formData->mail['body'] = $bod;
else: // odstrani REPLACER string
$bod = str_replace('REPLACER', '', $bod);
$formData->mail['body'] = $bod;
endif;
}
}
add_action('wpcf7_before_send_mail', 'wpcf7_change_mail');
### Action performed WHEN the mail is sent by CF7
function cf7_decrement_order_counter($formData){
$formName = 'A512';
if ($formData && $formName == $formData->title) {
$poc = $formData->posted_data['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 = 'A512';
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(60)) {
$val = get_option(CF7_COUNTER);
if($val == 0):
$content = str_replace('<h3>Tak neváhejte!</h3>', '<h3>Prodej byl ukončen.</h3>', $content);
else:
$content = str_replace('</ul>', '</ul><h3>Objednávkový formulář</h3><h3></h3>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', '<h3>Díky za objednávku.</h3><p>Jelikož jste objednali <b>větší počet</b> kusů, než bylo aktuálně k dispozici skladem, byl Vámi objednaný počet <b>snížen</b>.</p><p>Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.</p>', $content);
update_option(CF7_COUNTER, 0); // vynulovani pocitadla
update_option(CF7_LASTORD, 0); // vynulovani pocitadla
else:
$content = str_replace('REPLACER', '<h3>Díky za objednávku.</h3><p>Na adresu, kterou jste uvedli ve formuláři, byl zaslán potvrzující e-mail.</p>', $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:
/* 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();
}

