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();
}