• Resolved roostermarketing

    (@roostermarketing)


    I recently updated from 4.6 to 4.8 and have custom shortcodes in using ‘wpcf7_add_shortcode’ which broke after the update. I then found that this had been replaced by ‘wpcf7_add_form_tag’ which also isn’t working, is there anything else I need to do to get this to work?

Viewing 12 replies - 1 through 12 (of 12 total)
  • Joe Hana

    (@joehana)

    Having quite the same issue here and am currently inspecting it. Do you have a sample of your code available?

    Thread Starter roostermarketing

    (@roostermarketing)

    Below is an example of a shortcode i’m currently using:

    wpcf7_add_shortcode('opt_out', 'wpcf7_opt_out_shortcode_handler', true); /*[opt_out opt_out]*/
    function wpcf7_opt_out_shortcode_handler($tag) {
    	
    	if (!is_array($tag)) return '';
    	$name = $tag['name']; 
    	if (empty($name)) return '';
    	
    	$output = "";
    	
    	$opt_out_text = get_field('opt_out_text', 'option');
    	
    	$output .= "<div style='clear: both;'></div>";
    	$output .= "<div class='checkbox clearfix'>";
    		$output .= "<input type='checkbox' id='opt_out' name='opt_out' value='Opt out'>";
    		$output .= "<label class='round-check opt_out' for='opt_out'></label>";
    		$output .= "<p class='small'>".$opt_out_text."</p>";
    		$output .= '<input type="hidden" id="opt_out" name="opt_out" value="no" />';
    	$output .= "</div>";		
    	
    	return $output;
    	
    }

    After upgrading from 4.7 to 4.8 this no longer works, have also tried updating the shortcode to use wpcf7_add_form_tag but still no luck so I’ve reverted the plugin back to 4.7 for the moment.

    Joe Hana

    (@joehana)

    Try the following code instead and let me know if it is working for you:

    wpcf7_add_shortcode('opt_out', 'wpcf7_opt_out_shortcode_handler', true); /*[opt_out opt_out]*/
    function wpcf7_opt_out_shortcode_handler($tag) {
    	
    	if (!is_object($tag)) return '';
    	$name = $tag->name; 
    	if (empty($name)) return '';
    	
    	$output = "";
    	
    	$opt_out_text = get_field('opt_out_text', 'option');
    	
    	$output .= "<div style='clear: both;'></div>";
    	$output .= "<div class='checkbox clearfix'>";
    		$output .= "<input type='checkbox' id='opt_out' name='opt_out' value='Opt out'>";
    		$output .= "<label class='round-check opt_out' for='opt_out'></label>";
    		$output .= "<p class='small'>".$opt_out_text."</p>";
    		$output .= '<input type="hidden" id="opt_out" name="opt_out" value="no" />';
    	$output .= "</div>";		
    	
    	return $output;
    	
    }
    Joe Hana

    (@joehana)

    And if it is working try to use wpcf7_add_form_tag instead of wpcf7_add_shortcode and re-check again. This is because the wpcf7_add_shortcode is deprecated and will be removed soon anyway.

    Thread Starter roostermarketing

    (@roostermarketing)

    As mentioned above have already tried using wpcf7_add_form_tag. This appears to remove the error saying that wpcf7_add_shortcode is deprecated, however this also seems to stop the shortcode from working.

    Joe Hana

    (@joehana)

    Have you tried the modified code from above?

    Thread Starter roostermarketing

    (@roostermarketing)

    Thanks Joe,

    changing it from an array to an object has worked but we have kept ‘wpcf7_add_form_tag’

    Cheers for your help

    Joe Hana

    (@joehana)

    Hey,

    yes thats fine. That (object vs array) was basically anyway the main issue on the whole thing. However, you might also find a solution for swaping the wpcf7_add_shortcode with the wpcf7_add_form_tag just in order to be save for future updates of CF7.

    On a sidenote: The wpcf7_add_shortcode doesn’t do anything other than only wrapping the wpcf7_add_form_tag (see contact-form-7/includes/shortcodes.php) – so the issue must be quite easy to solve.

    Dan Stramer

    (@danstramer)

    Thanks for this.
    I was using it for displaying from which page the form was submitted:
    https://gist.github.com/bainternet/1133507
    stopped working after update to 4.8, and this corrected it back to working.

    Dan

    Joe Hana

    (@joehana)

    You’re welcome Dan.

    From your example code on line 9 it should also say:

    $name = $tag->name;

    instead of

    $name = $tag['name'];

    Dan Stramer

    (@danstramer)

    Thanks Joe,
    is that also a suggestion for future-proof compatibility?

    Dan

    Joe Hana

    (@joehana)

    As far as I can tell: Yes. This is a change being made in Contact Form 7 v4.8 but @takayukister can answer this probably better.

    • This reply was modified 7 years ago by Joe Hana.
Viewing 12 replies - 1 through 12 (of 12 total)
  • The topic ‘wpcf7_add_form_tag not working’ is closed to new replies.