A client wants the following:
- User clicks on a specific button which takes them to a partner’s site.
- If this is their first time clicking the link, they need to accept terms and conditions.
- If they’ve already accepted, button takes them directly to link.
- The client insists on being able to update everything (URL, button text) themselves, so I’m can’t hard code those values into the function.
In order to pull this off, I wrote a shortcode with attributes, and I’m using Gravity Forms hooks (gform_after_submission and gform_confirmation). I want these hooks to reference the shortcode attributes.
So if we use: [big_data_EULA url="http://www.example.com"]
then gform_confirmation can use $ url.
— —
I’ve tried two, things:
- Including the add_action and add_filter within the shortcode function
- Passing the variables from the shortcode to those hooks.
Could anyone help me figure out the right way to get this working?
Here’s my code:
function big_data_EULA_function($ atts){ extract(shortcode_atts(array( 'url' => 'http://www.google.com', 'confirm_text' => 'ACA Big Data Resource', 'click_thru_text' => 'ACA Big Data Resource', 'form' => '22', ), $ atts)); /// Some of these variables aren't used in this iteration but I would like to use in final form. $ EULA_url = $ url; $ EULA_confirm_text = $ confirm_text; $ EULA_click_thru_text = $ click_thru_text; $ EULA_gravity_form = $ form; $ EULA_user_ID = get_current_user_id(); $ EULA_meta_key = "_bigdata_EULA"; $ check_meta = get_user_meta( $ EULA_user_ID, $ EULA_meta_key, true ); if ($ check_meta) { $ button ='<div class="box-button white-button optimize-button"><a href="' . $ EULA_url . '">' . $ click_thru_text . '</a></div>'; return $ button; } else { ob_start(); // start a buffer echo '<div style="display: none; max-width: 60%;" id="hidden-content">'; echo gravity_form( 22, false, false, false, '', true ); echo '</div><div class="box-button white-button optimize-button"><a data-fancybox data-src="#hidden-content" href="javascript:;">' . $ EULA_confirm_text . '</a></div>'; $ output_string = ob_get_contents(); ob_end_clean(); return $ output_string; }; }; // Update the user_meta flag only if they've actually accepted the EULA, ie, submitted the form. add_action( 'gform_after_submission_22', 'bigdata_EULA',10, 1 ); function bigdata_EULA() { $ EULA_user_ID = get_current_user_id(); $ EULA_meta_key = "_bigdata_EULA"; $ current_date = date("F j, Y"); update_user_meta( $ EULA_user_ID, $ EULA_meta_key, $ current_date); }; // Redirect to the partner site. The redirect URL should come from the shortcode. add_filter( 'gform_confirmation_22', 'custom_confirmation', 10,1 ); function custom_confirmation( $ confirmation) { $ EULA_url = 'http://www.google.com'; $ confirmation = array( 'redirect' => $ EULA_url ); return $ confirmation; } add_shortcode('big_data_EULA', 'big_data_EULA_function');