Im trying to use the code belong for my plugin development but there is a caching issue (I think). Please below for the details.
Problem
I created filter to accept the customized url, and I'm querying the database but it seams like the result value is not changing in the browser but changing in the database. So basically the data passed is not returning the updated value from the database.
Code
add_action( 'init', function() {
add_rewrite_rule('coupon/([a-zA-Z0-9]+)[/]?$', 'index.php?coupon=$matches[1]', 'top');
});
add_filter('query_vars', function( $query_vars ) {
$query_vars[] = 'coupon';
return $query_vars;
});
add_action( 'template_include', function( $template ) {
if ( get_query_var( 'coupon' ) == false || get_query_var( 'coupon' ) == '' ) {
return $template;
}
ob_clean();
ob_start();
// Check if coupon exists
global $wpdb;
$coupon = get_query_var('coupon');
$coupon_query = $wpdb->prepare('SELECT * FROM wp_urls WHERE coupon = %s AND claimed_at IS NULL', $coupon);
$coupon_available = $wpdb->query($coupon_query) ? true : false;
if(!$coupon_available) {
header('Location: /'); // Redirect to landing page
exit();
}
return plugin_dir_path(__FILE__) . 'views/client/index.php';;
} );
index.php (Update function with the form)
After clicking submit button, the code below will run.
$update_query = "UPDATE wp_urls SET
`email` = %s,
`phone_number` = %s,
`first_name` = %s,
`last_name` = %s,
`message` = %s,
`claimed_at` = %s
WHERE `coupon` = %s";
// Execute query
$wpdb->query($wpdb->prepare($update_query, $placeholder_values));
Expected Result
The expected result should redirect the user to the header('Location: /');
if the coupon is not available.
Any idea?