diff --git a/prijs-per-postcode.php b/prijs-per-postcode.php
index 6a08d0f..bdab742 100644
--- a/prijs-per-postcode.php
+++ b/prijs-per-postcode.php
@@ -28,34 +28,175 @@ class PrijsPerPostcode
$uri = $_SERVER["REQUEST_URI"];
if_needed_place_postcode_form($uri);
- add_action("wp_footer", "set_checkout_fields_with_javascript");
- function set_checkout_fields_with_javascript()
- {
- // Only run on the checkout page
- if (!is_checkout() || is_wc_endpoint_url()) {
- return;
- }
+ add_action("woocommerce_product_query", [
+ $this,
+ "custom_show_products_by_tag",
+ ]);
+ add_action("template_redirect", [$this, "redirect_if_missing_tag"]);
+ add_action("wp_footer", [$this, "set_checkout_fields_with_javascript"]);
+ add_filter("woocommerce_checkout_fields", [
+ $this,
+ "make_checkout_fields_readonly",
+ ]);
+ add_filter("woocommerce_product_related_posts_query", [
+ $this,
+ "custom_filter_related_products_by_session_tag",
+ ]);
+ add_filter(
+ "get_the_terms",
+ [$this, "hide_lokaal_and_overige_regios_tags"],
+ 10,
+ 3,
+ );
+ }
- // Define the values you want to set
- $woonplaats = $SESSION["woonplaats"];
- $postcode = $_SESSION["postcode"];
- $address_1 =
- $_SESSION["straatnaam"] . " " . $_SESSION["huisnummer"];
- // Output the JavaScript
- ?>
-
-
+
+ is_main_query() &&
+ (is_shop() || is_product_category() || is_home())
+ ) {
+ // Replace this with your actual boolean logic
+ $show_lokaal = $_SESSION["lokaal_tarief"] ?? false;
+
+ // Determine which tag to show
+ $tag_to_show = $show_lokaal ? "lokaal" : "algemeen";
+
+ // Set the tax query to only include the chosen tag
+ $tax_query = [
+ [
+ "taxonomy" => "product_tag",
+ "field" => "slug",
+ "terms" => [$tag_to_show],
+ "operator" => "IN",
+ ],
+ ];
+ $q->set("tax_query", $tax_query);
}
}
-}
+ public function redirect_if_missing_tag()
+ {
+ // Only run on frontend single product pages
+ if (is_admin() || !is_singular("product")) {
+ return;
+ }
+
+ $product_id = get_the_ID();
+ $product = wc_get_product($product_id);
+
+ $show_lokaal = $_SESSION["lokaal_tarief"] ?? false;
+ $tag_to_show = $show_lokaal ? "lokaal" : "algemeen";
+
+ if (!$product || !has_term($tag_to_show, "product_tag", $product_id)) {
+ wp_redirect(home_url("/shop")); // Works with Dutch permalink
+ exit();
+ }
+ }
+
+ public function hide_lokaal_and_overige_regios_tags(
+ $terms,
+ $post_id,
+ $taxonomy,
+ ) {
+ if ($taxonomy === "product_tag" && !is_admin()) {
+ $tags_to_hide = ["lokaal", "algemeen"];
+ return array_filter($terms, function ($term) use ($tags_to_hide) {
+ return !in_array($term->slug, $tags_to_hide);
+ });
+ }
+ return $terms;
+ }
+
+ public function make_checkout_fields_readonly($fields)
+ {
+ $readonly_fields = [
+ "billing_address_1",
+ "billing_city",
+ "billing_postcode",
+ ];
+
+ foreach ($readonly_fields as $field) {
+ if (isset($fields["billing"][$field])) {
+ $fields["billing"][$field]["custom_attributes"][
+ "readonly"
+ ] = true;
+ }
+ }
+ return $fields;
+ }
+
+ public function custom_filter_related_products_by_session_tag($query)
+ {
+ // Start session if not already started
+ if (session_status() === PHP_SESSION_NONE) {
+ session_start();
+ }
+
+ // Determine which tag to exclude based on session
+ $show_lokaal = $_SESSION["lokaal_tarief"] ?? false;
+ $exclude_tag = $show_lokaal ? "algemeen" : "lokaal";
+
+ global $wpdb;
+
+ // Get term_taxonomy_id for the tag to exclude
+ $excluded_term = $wpdb->get_var(
+ $wpdb->prepare(
+ "SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} tt
+ JOIN {$wpdb->terms} t ON tt.term_id = t.term_id
+ WHERE tt.taxonomy = 'product_tag' AND t.slug = %s",
+ $exclude_tag,
+ ),
+ );
+
+ if ($excluded_term) {
+ $query[
+ "join"
+ ] .= " LEFT JOIN {$wpdb->term_relationships} exclude_tr ON exclude_tr.object_id = p.ID ";
+ $query["where"] .= $wpdb->prepare(
+ " AND ( exclude_tr.term_taxonomy_id != %d OR exclude_tr.term_taxonomy_id IS NULL )",
+ $excluded_term,
+ );
+ }
+
+ return $query;
+ }
+}
new PrijsPerPostcode();
diff --git a/session_dialog.php b/session_dialog.php
index fa5beb1..7ee8fe3 100644
--- a/session_dialog.php
+++ b/session_dialog.php
@@ -69,7 +69,8 @@ function send_postcode_data()
}
if (data.status === "success"){
- postcodeModal.close();
+ //postcodeModal.close();
+ location.reload();
}
}catch(err){
console.error("Fetch Failed:", err);
@@ -159,7 +160,8 @@ function handle_postcode_modal($data)
$_SESSION["huisnummer"] = $params["huisnummer"];
$_SESSION["straatnaam"] = $result["straatnaam"];
$_SESSION["woonplaats"] = $result["woonplaats"];
- $_SESSION["lokaak_tarief"] = postcode_in_range(
+
+ $_SESSION["lokaal_tarief"] = postcode_in_range(
$params["postcode"],
5000,
5800,