is_main_query() && (is_shop() || is_product_category() || is_home()) ) { $show_lokaal = $_SESSION["lokaal_tarief"] ?? false; $tag_to_show = $show_lokaal ? "lokaal" : "algemeen"; $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; } function redirect_checkout_if_lokaaltarief_not_set() { // Check if we are on the checkout, product, or cart page if (is_checkout() || is_product() || is_cart()) { // Prevent redirect on checkout endpoints (order-received, etc.) if (is_wc_endpoint_url()) { return; } // Check if the session variable is NOT set if (!isset($_SESSION["lokaal_tarief"])) { wc_clear_notices(); wc_add_notice( __( "Local rate not available. Redirecting to shop.", "woocommerce", ), "notice", ); wp_safe_redirect(wc_get_page_permalink("shop")); exit(); } } } public function force_404_for_specific_product_tags() { // Check if it's a product tag archive if (is_tax("product_tag")) { $tag = get_queried_object(); // List of tag slugs to block $blocked_tags = ["lokaal", "algemeen"]; // If the current tag is in the blocked list, trigger 404 if (in_array($tag->slug, $blocked_tags)) { global $wp_query; $wp_query->set_404(); status_header(404); } } } } new PrijsPerPostcode();