Last active
June 29, 2017 19:59
-
-
Save jagp/4847fcccf116e6ab935fce64e7f53557 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Plugin Name: Contact Form 7 - Success Page Redirects | |
* Description: An add-on for Contact Form 7 that provides a straightforward method to redirect visitors to success pages or thank you pages. | |
* Version: 1.2.1 | |
* Author: Ryan Nevius | |
* Author URI: http://www.ryannevius.com | |
* License: GPLv3 | |
*/ | |
/** | |
* Verify CF7 dependencies. | |
*/ | |
function cf7_success_page_admin_notice() { | |
// Verify that CF7 is active and updated to the required version (currently 3.9.0) | |
if ( is_plugin_active('contact-form-7/wp-contact-form-7.php') ) { | |
$wpcf7_path = plugin_dir_path( dirname(__FILE__) ) . 'contact-form-7/wp-contact-form-7.php'; | |
$wpcf7_plugin_data = get_plugin_data( $wpcf7_path, false, false); | |
$wpcf7_version = (int)preg_replace('/[.]/', '', $wpcf7_plugin_data['Version']); | |
// CF7 drops the ending ".0" for new major releases (e.g. Version 4.0 instead of 4.0.0...which would make the above version "40") | |
// We need to make sure this value has a digit in the 100s place. | |
if ( $wpcf7_version < 100 ) { | |
$wpcf7_version = $wpcf7_version * 10; | |
} | |
// If CF7 version is < 3.9.0 | |
if ( $wpcf7_version < 390 ) { | |
echo '<div class="error"><p><strong>Warning: </strong>Contact Form 7 - Success Page Redirects requires that you have the latest version of Contact Form 7 installed. Please upgrade now.</p></div>'; | |
} | |
} | |
// If it's not installed and activated, throw an error | |
else { | |
echo '<div class="error"><p>Contact Form 7 is not activated. The Contact Form 7 Plugin must be installed and activated before you can use Success Page Redirects.</p></div>'; | |
} | |
} | |
add_action( 'admin_notices', 'cf7_success_page_admin_notice' ); | |
/** | |
* Disable Contact Form 7 JavaScript completely | |
*/ | |
add_filter( 'wpcf7_load_js', '__return_false' ); | |
/** | |
* Adds a box to the main column on the form edit page. | |
* | |
* CF7 < 4.2 | |
*/ | |
function cf7_success_page_add_meta_boxes() { | |
add_meta_box( 'cf7-redirect-settings', 'Success Page Redirect', 'cf7_success_page_metaboxes', '', 'form', 'low'); | |
} | |
add_action( 'wpcf7_add_meta_boxes', 'cf7_success_page_add_meta_boxes' ); | |
/** | |
* Adds a tab to the editor on the form edit page. | |
* | |
* CF7 >= 4.2 | |
*/ | |
function cf7_success_add_page_panels($panels) { | |
$panels['redirect-panel'] = array( 'title' => 'Redirect Settings', 'callback' => 'cf7_success_page_panel_meta' ); | |
return $panels; | |
} | |
add_action( 'wpcf7_editor_panels', 'cf7_success_add_page_panels' ); | |
// Create the meta boxes (CF7 < 4.2) | |
function cf7_success_page_metaboxes( $post ) { | |
wp_nonce_field( 'cf7_success_page_metaboxes', 'cf7_success_page_metaboxes_nonce' ); | |
$cf7_success_page = get_post_meta( $post->id(), '_cf7_success_page_key', true ); | |
// The meta box content | |
$dropdown_options = array ( | |
'echo' => 0, | |
'name' => 'cf7-redirect-page-id', | |
'show_option_none' => '--', | |
'option_none_value' => '0', | |
'selected' => $cf7_success_page | |
); | |
echo '<fieldset> | |
<legend>Select a page to redirect to on successful form submission.</legend>' . | |
wp_dropdown_pages( $dropdown_options ) . | |
'</fieldset>'; | |
} | |
// Create the panel inputs (CF7 >= 4.2) | |
function cf7_success_page_panel_meta( $post ) { | |
wp_nonce_field( 'cf7_success_page_metaboxes', 'cf7_success_page_metaboxes_nonce' ); | |
$cf7_success_page = get_post_meta( $post->id(), '_cf7_success_page_key', true ); | |
// The meta box content | |
$dropdown_options = array ( | |
'echo' => 0, | |
'name' => 'cf7-redirect-page-id', | |
'show_option_none' => '--', | |
'option_none_value' => '0', | |
'selected' => $cf7_success_page | |
); | |
echo '<h3>Redirect Settings</h3> | |
<fieldset> | |
<legend>Select a page to redirect to on successful form submission.</legend>' . | |
wp_dropdown_pages( $dropdown_options ) . | |
'</fieldset>'; | |
} | |
// Store Success Page Info | |
function cf7_success_page_save_contact_form( $contact_form ) { | |
$contact_form_id = $contact_form->id(); | |
if ( !isset( $_POST ) || empty( $_POST ) || !isset( $_POST['cf7-redirect-page-id'] ) ) { | |
return; | |
} | |
else { | |
// Verify that the nonce is valid. | |
if ( ! wp_verify_nonce( $_POST['cf7_success_page_metaboxes_nonce'], 'cf7_success_page_metaboxes' ) ) { | |
return; | |
} | |
// Update the stored value | |
update_post_meta( $contact_form_id, '_cf7_success_page_key', $_POST['cf7-redirect-page-id'] ); | |
} | |
} | |
add_action( 'wpcf7_after_save', 'cf7_success_page_save_contact_form' ); | |
/** | |
* Copy Redirect page key and assign it to duplicate form | |
*/ | |
function cf7_success_page_after_form_create( $contact_form ){ | |
$contact_form_id = $contact_form->id(); | |
// Get the old form ID | |
if ( !empty( $_REQUEST['post'] ) && !empty( $_REQUEST['_wpnonce'] ) ) { | |
$old_form_id = get_post_meta( $_REQUEST['post'], '_cf7_success_page_key', true ); | |
} | |
// Update the duplicated form | |
update_post_meta( $contact_form_id, '_cf7_success_page_key', $old_form_id ); | |
} | |
add_action( 'wpcf7_after_create', 'cf7_success_page_after_form_create' ); | |
/** | |
* Redirect the user after the submission is made & was confirmed to be successful | |
* | |
* Function patched to process redirect after handling AJAX and processing lower priority functions hooking into mail_sent | |
* Ref: https://wordpress.org/support/topic/compatibility-issue-with-flamingo-official-plugin-for-storing-cf7-submissions/#post-9075677 | |
*/ | |
function cf7_success_page_form_submitted( $contactform, $result ) { | |
// AJAX is enabled; use JavaScript to perform the redirect instead | |
if ( isset( $_POST['_wpcf7_is_ajax_call'] ) || ! isset( $result['status'] ) ) { | |
return; | |
} | |
// Set array of acceptible statuses/cases | |
$cases = (array) apply_filters( 'wpcf7_flamingo_submit_if', | |
array( 'mail_sent' ) ); | |
// Reject the submission if it wasn't a valid status/case | |
if ( empty( $result['status'] ) | |
|| ! in_array( $result['status'], $cases ) ) { | |
return; | |
} | |
// Otherwise, continue forward as it was a successful form submission | |
$contact_form_id = $contactform->id(); | |
// Send user to a success page, if there is one | |
$success_page = get_post_meta( $contact_form_id, '_cf7_success_page_key', true ); | |
if ( !empty($success_page) ) { | |
wp_redirect( get_permalink( $success_page ) ); | |
die(); | |
} | |
} | |
add_action( 'wpcf7_submit', 'cf7_success_page_form_submitted', 900, 2 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment