Files
wp-postcode-plugin/prijs-per-postcode.php
2026-06-29 18:53:19 +02:00

223 lines
6.1 KiB
PHP

<?php
/*
* Plugin Name: Prijs per poscodeereeks.
* Description: Producten worden gefiltered aan de hand van opgegegeven postcodereeksen.Gebruikers met een postcode die in een opgegegeven postcodereeks valt zal een lokale prijs zien. Waar elke gebruiker met een postcode die buiten eem opgegeven reeks valt zal de reguliere prijs te zien krijgen.
* Author: Remo Zaros
* Version: 0.9.090
* Text Domeain: prijs-per-postcode
*/
require_once plugin_dir_path(__FILE__) . "session_dialog.php";
require_once plugin_dir_path(__FILE__) . "admin.php";
require_once plugin_dir_path(__FILE__) . "pppr_cookie.php";
if (!defined("ABSPATH")) {
echo "big bag of potatoes";
exit();
}
register_activation_hook( __FILE__, 'create_pppr_salt' );
if ( ! defined( 'WP_PPPR_SALT' ) ) {
$salt_file = __DIR__ . '/wp-pppr-salt.php';
if ( file_exists( $salt_file ) ) {
require_once $salt_file;
}else {
define("WP_PPPR_SALT", wp_salt( 'auth' ));
}
}
add_filter("woocommerce_sale_flash", "__return_null");
add_filter('woocommerce_show_variation_price', '__return_true');
add_action("init", function() {
$uri = $_SERVER["REQUEST_URI"];
init_postcode_handlers($uri);
// set the admin page
init_postode_admin();
}, 1
);
// Set endpoint (postcode-modal/v1/submit) for the modal form.
add_action("rest_api_ini", "register_modal_api");
/*Add local orice field to variation product.*/
add_action("woocommerce_variation_options_pricing",
function($loop, $variation_data, $variation)
{
woocommerce_wp_text_input([
"id" => "_local_price[" . $loop . "]",
"label" =>
__("Lokale Prijs", "woocommerce") .
" (" .
get_woocommerce_currency_symbol() .
")",
"value" => get_post_meta($variation->ID, "_local_price", true),
"data_type" => "price",
"wrapper_class" => "form-row form-row-first", // Left half
]);
}, 10, 3,
);
/*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)) {
update_post_meta(
$variation_id,
"_local_price",
wc_clean($local_price),
);
}
}, 10, 2,
);
// Replace "Reguliere prijs" with "Prijs overige regios" in variation prodict admin
add_filter( "gettext", function( $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)";
}
}
return $translated_text;
}, 99, 3,
);
/* Filter out variations whwre the price is either 0 or ''
*/
add_filter("woocommerce_variation_is_visible",
function (
$visible,
$variation_id,
$parent_id,
$variation,
) {
// Ensure $variation is a valid object
if (!$variation instanceof WC_Product_Variation) {
$variation = wc_get_product($variation_id);
}
if (!$variation) {
return false;
}
$price = pppr_is_local()
? $variation->get_meta("_local_price", true)
: $variation->get_regular_price();
if (empty($price) || floatval($price) == 0) {
return false;
}
return $visible;
}, 10, 4,
);
/* 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);
}
}
}
}
);
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
}