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');
extract()
.