• This was brought up previously with https://wordpress.org/support/topic/does-flamingo-work-with-cf7-success-page-redirects/, but it seems it was never fixed.

    It appears the Flamingo module that comes with Contact Form 7 uses

    
    add_action( 'wpcf7_submit', 'wpcf7_flamingo_submit', 10, 2 );
    

    to store the data into the Flamingo plugin based on a

    
    if ( 'mail_sent' == $result['status'] )
    

    condition within the wpcf7_flamingo_submit function. Meanwhile, this Contact Form 7 – Success Page Redirects plugin uses

    
    add_action( 'wpcf7_mail_sent', 'cf7_success_page_form_submitted' );
    

    to execute the wp_redirect() and die() commands, and this unfortunately hijacks the remaining items looking to still be ran as part of the larger wpcf7_submit action.

Viewing 10 replies - 1 through 10 (of 10 total)
  • Thread Starter KZeni

    (@kzeni)

    I was able to fix this compliance issue by simply changing this:

    
    /**
     * Redirect the user, after a successful email is sent
     */
    function cf7_success_page_form_submitted( $contact_form ) {
        $contact_form_id = $contact_form->id();
    
        // Send us 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_mail_sent', 'cf7_success_page_form_submitted' );
    

    to:

    
    /**
     * Redirect the user after the submission is made & was confirmed to be successful
     */
    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 );
    

    within this plugin’s cf7-success-page-redirects.php file. This way, it doesn’t interrupt the remaining submission process (allowing other functions running in the wpcf7_submit action to be completed first due to the really late 900 priority the cf7_success_page_form_submitted function is now being given) while still redirecting when appropriate.

    Please feel free to implement this fix, and I would love to see this patch officially implemented in a future version. Flamingo is the official form submission plugin for CF7 so this plugin should work with it, and I’m guessing this bug fix also improves compatibility with other plugins as well.

    Let me know if you have any questions, and thanks for the great (soon-to-be really great) plugin!

    Thread Starter KZeni

    (@kzeni)

    If this plugin does not get patched soon, then I will need to look at alternatives such as https://wordpress.org/plugins/contact-form-7-extras/ for all of my sites. That said, hopefully this plugin is patched as it’s nice to use.

    Thread Starter KZeni

    (@kzeni)

    Update. I was able to get this plugin to work with & without AJAX in addition to fixing the Flamingo compatibility!

    You can see the latest fully patched file here: https://gist.github.com/KZeni/454a0d7777c78cd2bfae0d0728a3ac56

    Essentially, I removed the add_filter( 'wpcf7_load_js', '__return_false' ); line, kept the existing cf7_success_page_form_submitted function to be used as the non-AJAX method, added a check to the non-AJAX function to make sure AJAX isn’t already being used to submit the form, and added a function which adds the redirect via the AJAX form submission setup.

    Again, I would love it if all of the updates culminating to make the patched file was officially adopted in a new version of this plugin. Thanks!

    I just wanted to say thank you so much for patching these files, been trying to sort this issue on a number of my clients sites and you code provided the solution!

    Thread Starter KZeni

    (@kzeni)

    It’s worth noting… https://contactform7.com/additional-settings/#javascript shows that the developer of Contact Form 7 is planning to drop support of on_sent_ok/OnSentOk and on_submit/OnSubmit by EOY 2017. So this patch may need to be updated if the updated version of CF7 affects how this redirect is set up.

    This factor is also being discussed for the Contact Form 7 Controls plugin as it also provides redirection after a successful form submission: https://wordpress.org/support/topic/redirection-analytics-event-features-rely-on-deprecated-cf7-functionality/

    Dear KZeni, thank you very much for your fix!
    I had the same issue and your solution helped me.

    Though, exchanging an original file text by your “lastest fully patch” did not work for me for some reason (redirect did not work, Flamingo did; I have the lastest version of every plugin and WP 4.7.5), but your patch in the second essage of this tread made the job!

    Thank you!

    Thread Starter KZeni

    (@kzeni)

    @petitulysses It’s worth noting that my patch was intended to be used with CF7 4.7, and it’s possible that CF7 4.8 (which many people are reporting issues with [see the numerous issues shown on the forum here: https://wordpress.org/support/plugin/contact-form-7 ]) broke this on_sent_ok/OnSentOk and on_submit/OnSubmit functionality that this patch relies on. It’s uncertain if this was intentionally done by the CF7 plugin developer or not at this point.

    Well, I did not update to 4.8, as said above, and still use 4.7.5. Yet, copy-pasting your full solution breaks something in redirection pluguin. If you have some idea, I would be greatefull. If not – OK. In any case, your partial solutions resolved Flamingo problems and it’s just great!

    @petitulysses Reading your comment, I just want to clarify that the replacement code @kzeni posted above is only a snippet of the plugin file; ie, if you were to copy his code and overwrite the plugin with it, you’ll be missing the majority of the plugin code, and it will not work.

    Here’s a link to the complete plugin file text, incorporating @kzeni’s patch. You can copy this entire block of text over the one in your plugin file via the editor. I bumped the version up for clarity but this is obviously not official in any way.

    I have confirmed this works on updated versions of CF7 and WP. Thanks @kzeni, this saved me a bunch of time spinning up my own solution!

    Thanks so much, KZeni for writing this brilliant patch and jagp for your helpful comments. The patch works perfectly with version 4.9.1 of Contact Form 7 and Flamingo version 1.7.

Viewing 10 replies - 1 through 10 (of 10 total)
  • The topic ‘Proposed Fix: Compatibility issue with Flamingo (official CF7 add-on)’ is closed to new replies.