clean up prijs-per-postcode

This commit is contained in:
Remo Zaros
2026-07-01 11:19:33 +02:00
parent 03f7e9857d
commit ef3abb9514

View File

@@ -12,12 +12,15 @@ require_once plugin_dir_path(__FILE__) . "session_dialog.php";
require_once plugin_dir_path(__FILE__) . "admin.php"; require_once plugin_dir_path(__FILE__) . "admin.php";
require_once plugin_dir_path(__FILE__) . "pppr_cookie.php"; require_once plugin_dir_path(__FILE__) . "pppr_cookie.php";
if (!defined("ABSPATH")) { if (!defined("ABSPATH")) {
echo "big bag of potatoes"; echo "big bag of potatoes";
exit(); exit();
} }
/*
* Create salt
*/
register_activation_hook( __FILE__, 'create_pppr_salt' ); register_activation_hook( __FILE__, 'create_pppr_salt' );
if ( ! defined( 'WP_PPPR_SALT' ) ) { if ( ! defined( 'WP_PPPR_SALT' ) ) {
$salt_file = __DIR__ . '/wp-pppr-salt.php'; $salt_file = __DIR__ . '/wp-pppr-salt.php';
@@ -33,6 +36,9 @@ add_filter("woocommerce_sale_flash", "__return_null");
add_filter('woocommerce_show_variation_price', '__return_true'); add_filter('woocommerce_show_variation_price', '__return_true');
/*
* Init the plugin
*/
add_action("init", function() { add_action("init", function() {
$uri = $_SERVER["REQUEST_URI"]; $uri = $_SERVER["REQUEST_URI"];
init_postcode_handlers($uri); init_postcode_handlers($uri);
@@ -42,10 +48,21 @@ add_action("init", function() {
); );
// Set endpoint (postcode-modal/v1/submit) for the modal form. /*
add_action("rest_api_ini", "register_modal_api"); * Set endpoint (postcode-modal/v1/submit) for the modal form.
*/
add_action("rest_api_init", function () {
register_rest_route( 'postcode-modal/v1', '/submit', array(
'methods' => 'POST',
'callback' => 'handle_postcode_modal',
'permission_callback' => '__return_true',
) );
});
/*Add local orice field to variation product.*/
/*
* Add local orice field to variation product.
*/
add_action("woocommerce_variation_options_pricing", add_action("woocommerce_variation_options_pricing",
function($loop, $variation_data, $variation) function($loop, $variation_data, $variation)
{ {
@@ -64,7 +81,9 @@ add_action("woocommerce_variation_options_pricing",
); );
/*Save the local price on product save */ /*
* Save the local price on product save in the admin
*/
add_action("woocommerce_save_product_variation", add_action("woocommerce_save_product_variation",
function ($variation_id, $i) function ($variation_id, $i)
{ {
@@ -79,7 +98,11 @@ add_action("woocommerce_save_product_variation",
}, 10, 2, }, 10, 2,
); );
// Replace "Reguliere prijs" with "Prijs overige regios" in variation prodict admin
/*
* Replace "Reguliere prijs" with "Prijs overige regios"
* in variation prodict admin
*/
add_filter( "gettext", function( $translated_text, $text, $domain,) { add_filter( "gettext", function( $translated_text, $text, $domain,) {
if ( if (
"woocommerce" === $domain && "woocommerce" === $domain &&
@@ -96,7 +119,9 @@ add_filter( "gettext", function( $translated_text, $text, $domain,) {
); );
/* Filter out variations whwre the price is either 0 or '' /*
* Filter out variations whwre the price is
* either 0 or '' in the dropdown menu product page
*/ */
add_filter("woocommerce_variation_is_visible", add_filter("woocommerce_variation_is_visible",
function ( function (
@@ -127,31 +152,34 @@ add_filter("woocommerce_variation_is_visible",
); );
/* Dynamically recalculates the cart total by overriding the standard price /*
* Dynamically recalculates the cart total by overriding the standard price
* with a region-specific _local_price for variations when * with a region-specific _local_price for variations when
* the user's location matches the PPPR cookie criteria * the user's location matches the PPPR cookie criteria
*/ */
add_action("woocommerce_before_calculate_totals", add_action("woocommerce_before_calculate_totals", function($cart)
function($cart)
{ {
if (is_admin() && !defined("DOING_AJAX")) { if (is_admin() && !defined("DOING_AJAX")) {
return; return;
} }
foreach ($cart->get_cart() as $cart_item) { foreach ($cart->get_cart() as $cart_item)
{
$product = $cart_item["data"]; $product = $cart_item["data"];
$variation_id = $product->is_type("variation") $variation_id = $product->is_type("variation")
? $product->get_id() ? $product->get_id()
: 0; : 0;
if ( $variation_id && isset($_COOKIE["PPPR"]) && pppr_is_local() ) { if ( $variation_id && isset($_COOKIE["PPPR"]) && pppr_is_local() )
{
$local_price = get_post_meta( $local_price = get_post_meta(
$variation_id, $variation_id,
"_local_price", "_local_price",
true, true,
); );
if ($local_price) { if ($local_price)
{
$product->set_price($local_price); $product->set_price($local_price);
} }
} }
@@ -160,6 +188,9 @@ add_action("woocommerce_before_calculate_totals",
); );
/*
* Filter to display the regular or local price on teh product page.
*/
add_filter( "woocommerce_get_price_html", add_filter( "woocommerce_get_price_html",
function($price_html, $product) function($price_html, $product)
{ {
@@ -181,7 +212,9 @@ add_filter( "woocommerce_get_price_html",
}, 10, 2, }, 10, 2,
); );
/* Enforces region-locking by clearing the cart and redirecting users to
/*
* Enforces region-locking by clearing the cart and redirecting users to
* the shop page if their location cookie is invalid or expired when * the shop page if their location cookie is invalid or expired when
* accessing key WooCommerce pages. * accessing key WooCommerce pages.
*/ */
@@ -215,6 +248,43 @@ add_action("template_redirect",
); );
/*
* Chack or postcode is still valid when pressing the buy button
*/
add_action( 'woocommerce_after_checkout_validation', function( $data, $errors ) {
// 1. Controleer of de cookie bestaat en geldig is
if ( ! isset( $_COOKIE['PPPR'] ) || ! verify_pppr_cookie_string() ) {
$errors->add(
'pppr_cookie_invalid',
__( '<strong>Fout:</strong> Sessie verlopen. Vernieuw de pagina en vul je postcode opnieuw in.', 'woocommerce' )
);
return; // Stop hier, geen zin om verder te checken
}
$pppr_data = get_PPPR_data();
if ( ! $pppr_data || empty( $pppr_data['postcode'] ) ) {
$errors->add(
'pppr_data_missing',
__( '<strong>Fout:</strong> Kon postcode niet laden.', 'woocommerce' )
);
return;
}
// 3. Normalizeer postcodes (gebruik de juiste variabelen!)
$cookie_pc = strtoupper( str_replace( ' ', '', $pppr_data['postcode'] ) );
$shipping_pc = strtoupper( str_replace( ' ', '', $data['shipping_postcode'] ) );
// 4. Vergelijk
if ( $cookie_pc !== $shipping_pc ) {
wc_add_notice(
__( '<strong>Fout:</strong> Afleverpostcode komt niet overeen met de eerder ingevulde postcode.', 'woocommerce' ),
'error'
);
}
}, 10, 2 );
function get_shop_url () { function get_shop_url () {
return (function_exists('wcml_get_store_url')) return (function_exists('wcml_get_store_url'))
? wcml_get_store_url() // WPML WooCommerce Multilingual ? wcml_get_store_url() // WPML WooCommerce Multilingual