how to change form action url for contact form 7?

后端 未结 4 1223
南笙
南笙 2020-12-14 04:17

I\'m using Contact Form 7 in a wordpress site with multiple forms. I need to direct one form to a different form action url than the others.

I found the reply below

相关标签:
4条回答
  • 2020-12-14 04:49

    According to @abbas-arif, his solution works great, but have a limitation. This solution change the form's action on all forms present in post with that ID. A better solution should be to use directly the form's ID. To get it, whit wordpress >5.2, you can use:

    add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
    function wpcf7_custom_form_action_url($url)
    {
        $cf7forms = WPCF7_ContactForm::get_current();
        $Form = $cf7forms -> id;
        
        
            switch($Form){
                case 1:
                    return 'destination like salesforce url 1...';
                case 2:
                    return 'destination like salesforce url 2...';
                case 3:
                    return 'destination like salesforce url 3...';
                default:
                    return $url;
                
            }
    
    }
    
    0 讨论(0)
  • 2020-12-14 05:00

    You can add actions after a successful submission like the documentation says

    Adding a filter will work in the sense that it will change the action on the form but unfortunately it will also break the functionality of the plugin. If you add the filter like other answers suggest the form will keep the spinner state after submission.

    You can make the form do something else on submit by using advanced settings such as:

    on_submit: "alert('submit');"
    

    more details about advanced settings here.

    0 讨论(0)
  • 2020-12-14 05:15

    Since you're not familiar with PHP code at all, I'll give you a bit of a crash course in coding within the Wordpress API.

    First off, you need to know the difference between functions and variables. A variable is a single entity that is meant to represent an arbitrary value. The value can be anything. A number, somebody's name, or complex data.

    A function is something that executes a series of actions to either send back - or return - a variable, or alter a given variable.

    <?php
    $a = 1; //Number
    $b = 'b'; //String *note the quotes around it*
    $c = my_function(); //Call to a function called my_function
    echo $a; //1
    echo $b; //b
    echo $c; //oh, hello
    function my_function()
    {
        return 'oh, hello';
    }
    ?>
    

    Wordpress utilizes its own action and filter system loosely based on the Event-Driven Programming style.

    What this means is that Wordpress is "listening" for a certain event to happen, and when it does, it executes a function attached to that event (also known as a callback). These are the "Actions" and "Filters". So what's the difference?

    Actions are functions that do stuff
    Filters are functions that return stuff

    So how does this all fit in to your problem?

    Contact Form 7 has its own filter that returns the URL of where information is to be sent by its forms.

    So lets look at the basics of a Filter Hook

    add_filter('hook_name', 'your_filter');
    
    1. add_filter is the function that tells Wordpress it needs to listen for a particular event.
    2. 'hook_name' is the event Wordpress is listening for.
    3. 'your_filter' is the function - or callback - that is called when the 'hook_name' event is fired.

    The link to the previous thread states that the hook name you need to be using is 'wpcf7_form_action_url'. That means that all you have to do is make a call to add_filter, set the 'hook_name' to 'wpcf7_form_action_url', and then set 'your_filter' to the name of the function you'll be setting up as your callback.

    Once that's done, you just need to define a function with a name that matches whatever you put in place of 'your_filter', and just make sure that it returns a URL to modify the form action.

    Now here comes the problem: This is going to alter ALL of your forms. But first thing's first: See if you can get some working code going on your own. Just write your code in functions.php and let us know how it turns out.

    UPDATE:

    The fact that you were able to get it so quickly is wonderful, and shows the amount of research effort you're putting into this.

    Put all of this in functions.php

    add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
    function wpcf7_custom_form_action_url()
    {
        return 'wheretopost.asp';
    }
    

    As mentioned before, that will affect ALL of your forms. If this is only supposed to affect a form on a given page, you can do something like this:

    add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
    function wpcf7_custom_form_action_url($url)
    {
        global $post;
        $id_to_change = 1;
        if($post->ID === $id_to_change)
            return 'wheretopost.asp';
        else
            return $url;
    }
    

    All you would need to do is change the value of $id_to_change to a number that represents the ID of the Post/Page you're trying to affect. So if - for example - you have an About Page that you would like to change the Action URL, you can find the ID number of your About Page in the Admin Dashboard (just go to the Page editor and look in your URL for the ID number) and change the 1 to whatever the ID number is.

    Hope this helps you out, and best of luck to you.

    0 讨论(0)
  • 2020-12-14 05:15

    Great answer @maiorano84 but I think you should check form ID instead of Post. Here is my version.

    add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
    function wpcf7_custom_form_action_url($url)
    {
        $wpcf7 = WPCF7_ContactForm::get_current();
        $wpcf7_id = $wpcf7->id();
    
        $form_id = 123;
        
    
        return $wpcf7_id == $form_id? '/action.php' : $url;
    }
    

    Another thing you might need to disable WPCF7 AJAX. That can be disabled by placing the following code in your wp-config.php

    define('WPCF7_LOAD_JS', false);
    
    0 讨论(0)
提交回复
热议问题