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();