From a43d6213b5be4656a0aaea11372d4fdaeea152f4 Mon Sep 17 00:00:00 2001 From: Remo Zaros Date: Mon, 29 Jun 2026 18:53:19 +0200 Subject: [PATCH] Remove the PHP class --- prijs-per-postcode.php | 283 +++++++++++++++++++---------------------- 1 file changed, 131 insertions(+), 152 deletions(-) diff --git a/prijs-per-postcode.php b/prijs-per-postcode.php index b94a59b..30fbb32 100644 --- a/prijs-per-postcode.php +++ b/prijs-per-postcode.php @@ -1,10 +1,10 @@ "_local_price[" . $loop . "]", @@ -100,9 +60,13 @@ class PrijsPerPostcode "data_type" => "price", "wrapper_class" => "form-row form-row-first", // Left half ]); - } + }, 10, 3, +); - public function save_local_price_field($variation_id, $i) + +/*Save the local price on product save */ +add_action("woocommerce_save_product_variation", + function ($variation_id, $i) { $local_price = $_POST["_local_price"][$i]; if (isset($local_price)) { @@ -112,84 +76,30 @@ class PrijsPerPostcode wc_clean($local_price), ); } - } - - public function use_local_price_if_local_postcode($cart) - { - if (is_admin() && !defined("DOING_AJAX")) { - return; - } - - foreach ($cart->get_cart() as $cart_item) { - $product = $cart_item["data"]; - $variation_id = $product->is_type("variation") - ? $product->get_id() - : 0; - - if ( - $variation_id && - isset($_COOKIE["PPPR"]) && - pppr_is_local() - ) { - $local_price = get_post_meta( - $variation_id, - "_local_price", - true, - ); - if ($local_price) { - $product->set_price($local_price); - } - } - } - } - - public function check_postcode_on_every_woocommerce_page() - { - if (is_admin() || defined("DOING_AJAX")) { - return; - } + }, 10, 2, +); +// Replace "Reguliere prijs" with "Prijs overige regios" in variation prodict admin +add_filter( "gettext", function( $translated_text, $text, $domain,) { if ( - (is_product() || - is_product_category() || - is_product_tag() || - is_cart() || - is_checkout() || - is_account_page()) && - !is_shop() + "woocommerce" === $domain && + is_admin() && + isset($_REQUEST["action"]) && + "woocommerce_load_variations" === $_REQUEST["action"] ) { - if (!verify_pppr_cookie_string()) { - if (!WC()->cart->is_empty()) { - WC()->cart->empty_cart(); - } - wp_safe_redirect($this->get_shop_url()); - exit(); - }else{ - update_expire_pppr_cookie(); + if ($translated_text === "Reguliere prijs (%s)") { + $translated_text = "Prijs overige regios (%s)"; } } - } + return $translated_text; + }, 99, 3, +); - public function display_local_price_on_product($price_html, $product) - { - if ( - $product->is_type("variation") && - isset($_COOKIE["PPPR"]) && - pppr_is_local() - ) { - $local_price = get_post_meta( - $product->get_id(), - "_local_price", - true, - ); - if ($local_price !== "") { - return wc_price($local_price); - } - } - return $price_html; - } - function filter_variation_by_local_price( +/* Filter out variations whwre the price is either 0 or '' + */ +add_filter("woocommerce_variation_is_visible", + function ( $visible, $variation_id, $parent_id, @@ -213,31 +123,100 @@ class PrijsPerPostcode } return $visible; - } + }, 10, 4, +); - public function change_variation_regular_price_label( - $translated_text, - $text, - $domain, - ) { - if ( - "woocommerce" === $domain && - is_admin() && - isset($_REQUEST["action"]) && - "woocommerce_load_variations" === $_REQUEST["action"] - ) { - if ($translated_text === "Reguliere prijs (%s)") { - $translated_text = "Prijs overige regios (%s)"; + +/* Dynamically recalculates the cart total by overriding the standard price + * with a region-specific _local_price for variations when + * the user's location matches the PPPR cookie criteria + */ +add_action("woocommerce_before_calculate_totals", + function($cart) + { + if (is_admin() && !defined("DOING_AJAX")) { + return; + } + + foreach ($cart->get_cart() as $cart_item) { + $product = $cart_item["data"]; + $variation_id = $product->is_type("variation") + ? $product->get_id() + : 0; + + if ( $variation_id && isset($_COOKIE["PPPR"]) && pppr_is_local() ) { + $local_price = get_post_meta( + $variation_id, + "_local_price", + true, + ); + + if ($local_price) { + $product->set_price($local_price); + } } } - return $translated_text; } +); - public function get_shop_url () { - return (function_exists('wcml_get_store_url')) - ? wcml_get_store_url() // WPML WooCommerce Multilingual - : get_permalink(wc_get_page_id('shop')); // Fallback - } + +add_filter( "woocommerce_get_price_html", + function($price_html, $product) + { + if ( + $product->is_type("variation") && + isset($_COOKIE["PPPR"]) && + pppr_is_local() + ) { + $local_price = get_post_meta( + $product->get_id(), + "_local_price", + true, + ); + if ($local_price !== "") { + return wc_price($local_price); + } + } + return $price_html; + }, 10, 2, +); + +/* Enforces region-locking by clearing the cart and redirecting users to + * the shop page if their location cookie is invalid or expired when + * accessing key WooCommerce pages. + */ +add_action("template_redirect", + function () + { + if (is_admin() || defined("DOING_AJAX")) { + return; + } + + if ( + (is_product() || + is_product_category() || + is_product_tag() || + is_cart() || + is_checkout() || + is_account_page()) && + !is_shop() + ) { + if (!verify_pppr_cookie_string()) { + if (!WC()->cart->is_empty()) { + WC()->cart->empty_cart(); + } + wp_safe_redirect(get_shop_url()); + exit(); + }else{ + update_expire_pppr_cookie(); + } + } + } +); + + +function get_shop_url () { + return (function_exists('wcml_get_store_url')) + ? wcml_get_store_url() // WPML WooCommerce Multilingual + : get_permalink(wc_get_page_id('shop')); // Fallback } - -new PrijsPerPostcode();