From 58307197775bc2013bfd0d03d2b9e7d9b96a2e64 Mon Sep 17 00:00:00 2001 From: Reinhold Kainhofer <reinhold@kainhofer.com> Date: Fri, 26 May 2017 01:44:16 +0200 Subject: [PATCH] urldecode all SLUGs All SLUGs are stored URL-encoded in the database, so we need to urldecode them before inserting them into lists like the Categories variable. This allows general UTF-8 SLUGs to work properly. Fixes #17 --- .../rules_shipping_framework_woocommerce.php | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/includes/rules_shipping_framework_woocommerce.php b/includes/rules_shipping_framework_woocommerce.php index 4499c3e..5d8edde 100644 --- a/includes/rules_shipping_framework_woocommerce.php +++ b/includes/rules_shipping_framework_woocommerce.php @@ -196,10 +196,10 @@ class RulesShippingFrameworkWooCommerce extends RulesShippingFramework { $skus[] = $product['data']->get_sku(); } foreach (wc_get_product_terms( $id, 'product_cat') as $c) { - $categories[] = $c->slug; + $categories[] = urldecode($c->slug); } foreach (wc_get_product_terms( $id, 'product_tag') as $c) { - $tags[] = $c->slug; + $tags[] = urldecode($c->slug); } $shipclass = $product['data']->get_shipping_class(); if ($shipclass) { @@ -251,7 +251,7 @@ class RulesShippingFrameworkWooCommerce extends RulesShippingFramework { foreach ($products as $product) { foreach (get_product_vendors($product['data']->get_id()) as $vendor) { // $this->printWarning("<pre>vendor: ".print_r($vendor,1)."</pre>"); - $vendors[] = $vendor->slug; + $vendors[] = urldecode($vendor->slug); $vendornames[] = $vendor->title; $vendorids[] = $vendor->ID; } @@ -271,7 +271,7 @@ class RulesShippingFrameworkWooCommerce extends RulesShippingFramework { $vendor = yith_get_vendor($product['data']->get_id(), 'product'); // $this->printWarning("<pre>vendor: ".print_r($vendor,1)."</pre>"); if ($vendor->is_valid()) { - $vendors[] = $vendor->slug; + $vendors[] = urldecode($vendor->l); $vendornames[] = $vendor->name; $vendorids[] = $vendor->term_id; } @@ -384,15 +384,15 @@ class RulesShippingFrameworkWooCommerce extends RulesShippingFramework { $subcategories = array(); if (isset($filter_conditions['subcategories']) && !empty($filter_conditions['subcategories'])) { foreach ($filter_conditions['subcategories'] as $catslug) { - // Get the term itself (we have only the slug!) - $cat = get_term_by('slug', $catslug, 'product_cat'); + // Get the term itself (we have only the slug!), DB stores slugs as URL-encoded! + $cat = get_term_by('slug', urlencode($catslug), 'product_cat'); if (empty($cat)) continue; - $subcategories[] = $cat->slug; + $subcategories[] = urldecode($cat->slug); // Get the list of all subcategories of the given categories $args=array('child_of' => $cat->term_id, 'hierarchical' => 1); foreach (get_terms( 'product_cat', $args) as $subcat) { - $subcategories[] = $subcat->slug; + $subcategories[] = urldecode($subcat->slug); } } $subcategories = array_unique($subcategories); @@ -402,7 +402,7 @@ class RulesShippingFrameworkWooCommerce extends RulesShippingFramework { foreach ($products as $p) { $prodcategories = array(); foreach (wc_get_product_terms( $p['data']->id, 'product_cat') as $cat) { - $prodcategories[] = $cat->slug; + $prodcategories[] = urldecode($cat->slug); } if (!empty($filter_conditions['products']) && !in_array($p['data']->get_sku(), $filter_conditions['products'])) continue; @@ -429,7 +429,7 @@ class RulesShippingFrameworkWooCommerce extends RulesShippingFramework { // "WooThemes Vendor Products" support (vendors stored in its own taxonomy) if (class_exists("WooCommerce_Product_Vendors") && function_exists("get_product_vendors")) { foreach (get_product_vendors($p['data']->id) as $vendor) { - $vnd_props[] = $vendor->slug; + $vnd_props[] = urldecode($vendor->slug); } } @@ -437,7 +437,7 @@ class RulesShippingFrameworkWooCommerce extends RulesShippingFramework { if (function_exists("yith_get_vendor")) { $vendor = yith_get_vendor($p['data']->id, 'product'); if ($vendor->is_valid()) { - $vnd_props[] = $vendor->slug; + $vnd_props[] = urldecode($vendor->slug); } } -- GitLab