Changeset 3165618
- Timestamp:
- 10/09/2024 10:21:47 AM (18 months ago)
- Location:
- product-feeder
- Files:
-
- 11 added
- 3 edited
-
tags/2.6.0 (added)
-
tags/2.6.0/includes (added)
-
tags/2.6.0/includes/css (added)
-
tags/2.6.0/includes/css/product-feeder.css (added)
-
tags/2.6.0/includes/product-feeder.php (added)
-
tags/2.6.0/languages (added)
-
tags/2.6.0/languages/product-feeder-nl_NL.mo (added)
-
tags/2.6.0/languages/product-feeder-nl_NL.po (added)
-
tags/2.6.0/product-feeder.php (added)
-
tags/2.6.0/readme.txt (added)
-
tags/2.6.0/uninstall.php (added)
-
trunk/includes/product-feeder.php (modified) (6 diffs)
-
trunk/product-feeder.php (modified) (1 diff)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
product-feeder/trunk/includes/product-feeder.php
r3155110 r3165618 140 140 $query = $wpdb->prepare("SELECT DISTINCT(`".$wpdb->postmeta."`.meta_key) FROM `".$wpdb->posts."` LEFT JOIN `".$wpdb->postmeta."` ON `".$wpdb->posts."`.ID = `".$wpdb->postmeta."`.post_id WHERE `".$wpdb->posts."`.post_type = %s AND `".$wpdb->postmeta."`.meta_key != '' AND `".$wpdb->postmeta."`.meta_key NOT RegExp '(^[_0-9].+$)'", 'product_variation'); 141 141 foreach ($wpdb->get_col($query) as $metafield) { 142 if ( preg_match("/^_/", $metafield)) continue;142 if (in_array($metafield, ['_total_sales', '_tax_class', '_backorders', '_sold_individually', '_virtual', '_downloadable', '_download_limit', '_download_expiry', '_stock_status', '_wc_average_rating', '_wc_review_count', '_product_version', '_regular_price', '_thumbnail_id', '_crosssell_ids', '_weight', '_length', '_height'])) continue; 143 143 $Options[__('Meta field', 'product-feeder')]['meta_'.$metafield] = $metafield; 144 144 } … … 528 528 $CustomFields['Attributes'][$this->AttributeTaxonomies[$attr_name_short]] = array(); 529 529 foreach ($attr_data['options'] as $term_id) { 530 if (!isset($this->AttributeValues[$term_id])) $this->AttributeValues[$term_id] = get_term($term_id)->name; 530 if (!isset($this->AttributeValues[$term_id])) { 531 $Term = get_term($term_id); 532 if (!is_wp_error($Term) && isset($Term->name)) $this->AttributeValues[$term_id] = $Term->name; 533 } 531 534 if (isset($this->AttributeValues[$term_id])) $CustomFields['Attributes'][$this->AttributeTaxonomies[$attr_name_short]][] = $this->AttributeValues[$term_id]; 532 535 } … … 632 635 $ProductDeliveryTerms = ''; 633 636 foreach ($Product->get_attributes() as $attribute) { 634 $Key = $attribute->get_taxonomy(); 635 foreach ($attribute->get_terms() as $Term) { 636 if (in_array($Key, $Options['Sizes'])) { 637 if (empty($ProductSize)) $ProductSize = $Term->name; 638 else $ProductSize .= " ".$Term->name; 637 $Terms = $attribute->get_terms(); 638 if (!empty($Terms)) { 639 $Key = $attribute->get_taxonomy(); 640 foreach ($Terms as $Term) { 641 if (in_array($Key, $Options['Sizes'])) { 642 if (empty($ProductSize)) $ProductSize = $Term->name; 643 else $ProductSize .= " ".$Term->name; 644 } 645 if (in_array($Key, $Options['Brand']) && empty($ProductData['Brand'])) $ProductData['Brand'] = $Term->name; 646 if (in_array($Key, $Options['Color']) && empty($ProductColor)) $ProductColor = $Term->name; 647 if (in_array($Key, $Options['Season']) && empty($ProductData['Season'])) $ProductData['Season'] = $Term->name; 648 if (in_array($Key, $Options['Gender']) && empty($ProductGender)) $ProductGender = $Term->name; 649 if (in_array($Key, $Options['Material']) && empty($ProductMaterial)) $ProductMaterial = $Term->name; 650 if (in_array($Key, $Options['Condition']) && empty($ProductCondition)) $ProductCondition = $Term->name; 651 if (in_array($Key, $Options['DeliveryTerms']) && empty($ProductDeliveryTerms)) $ProductDeliveryTerms = $Term->name; 639 652 } 640 if (in_array($Key, $Options['Brand']) && empty($ProductData['Brand'])) $ProductData['Brand'] = $Term->name;641 if (in_array($Key, $Options['Color']) && empty($ProductColor)) $ProductColor = $Term->name;642 if (in_array($Key, $Options['Season']) && empty($ProductData['Season'])) $ProductData['Season'] = $Term->name;643 if (in_array($Key, $Options['Gender']) && empty($ProductGender)) $ProductGender = $Term->name;644 if (in_array($Key, $Options['Material']) && empty($ProductMaterial)) $ProductMaterial = $Term->name;645 if (in_array($Key, $Options['Condition']) && empty($ProductCondition)) $ProductCondition = $Term->name;646 if (in_array($Key, $Options['DeliveryTerms']) && empty($ProductDeliveryTerms)) $ProductDeliveryTerms = $Term->name;647 653 } 648 654 } … … 729 735 "Currency" => $Currency 730 736 ), 731 "Stock" => (int) $variation_data['stock_quantity'],737 "Stock" => (int)(($Variation->get_manage_stock()) ? $Variation->get_stock_quantity() : $Variation->get_stock_status() == 'instock'), 732 738 "Images" => $ImageLinks, 733 739 "CustomFields" => $this->GetCustomFields($Variation, 'variation'), 734 740 "Updated" => get_the_modified_date('Y-m-d\TH:i:sT', $VariationID), 735 741 ); 736 if (is_array($variation_data['attributes'])) { 737 foreach ($variation_data['attributes'] as $attr_name => $attr_value) { 738 if (in_array($attr_name, $Options['Sizes'])) { 739 if (empty($VariationData['Size'])) $VariationData['Size'] = $this->ResolveAttributeValue($attr_value); 740 else $VariationData['Size'] .= " ".$this->ResolveAttributeValue($attr_value); 741 } 742 if (in_array($attr_name, $Options['Brand']) && empty($ProductData['Brand'])) $ProductData['Brand'] = $this->ResolveAttributeValue($attr_value);; 743 if (in_array($attr_name, $Options['EAN']) && empty($VariationData['EAN'])) $VariationData['EAN'] = $this->ResolveAttributeValue($attr_value);; 744 if (in_array($attr_name, $Options['Color']) && empty($VariationData['Color'])) $VariationData['Color'] = $this->ResolveAttributeValue($attr_value);; 745 if (in_array($attr_name, $Options['Season']) && empty($ProductData['Season'])) $ProductData['Season'] = $this->ResolveAttributeValue($attr_value);; 746 if (in_array($attr_name, $Options['Gender']) && empty($VariationData['Gender'])) $VariationData['Gender'] = $this->ResolveAttributeValue($attr_value);; 747 if (in_array($attr_name, $Options['Material']) && empty($VariationData['Material'])) $VariationData['Material'] = $this->ResolveAttributeValue($attr_value);; 748 if (in_array($attr_name, $Options['Condition']) && empty($VariationData['Condition'])) $VariationData['Condition'] = $this->ResolveAttributeValue($attr_value);; 749 if (in_array($attr_name, $Options['DeliveryTerms']) && empty($VariationData['DeliveryTerms'])) $VariationData['DeliveryTerms'] = $this->ResolveAttributeValue($attr_value);; 750 } 751 } 752 foreach (array_keys($Options) as $Key) { 753 $OptionValues = $Options[$Key]; 754 if (!is_array($OptionValues)) $OptionValues = array($OptionValues); 755 foreach ($OptionValues as $OptionValue) { 756 $Terms = wp_get_post_terms($ProductID, $OptionValue); 757 if (!empty($Terms)) { 758 $Terms = wp_list_pluck($Terms, 'name'); 759 if (!empty($Terms)) { 760 $Value = implode(' ', $Terms); 761 $OptionValue = 'category_'.$OptionValue; 762 if (in_array($OptionValue, $Options['Brand']) && empty($ProductData['Brand'])) $ProductData['Brand'] = $Value; 763 if (in_array($OptionValue, $Options['EAN']) && empty($VariationData['EAN'])) $VariationData['EAN'] = $Value; 764 if (in_array($OptionValue, $Options['Color']) && empty($VariationData['Color'])) $VariationData['Color'] = $Value; 765 if (in_array($OptionValue, $Options['Season']) && empty($ProductData['Season'])) $ProductData['Season'] = $Value; 766 if (in_array($OptionValue, $Options['Gender']) && empty($VariationData['Gender'])) $VariationData['Gender'] = $Value; 767 if (in_array($OptionValue, $Options['Material']) && empty($VariationData['Material'])) $VariationData['Material'] = $Value; 768 if (in_array($OptionValue, $Options['Condition']) && empty($VariationData['Condition'])) $VariationData['Condition'] = $Value; 769 if (in_array($OptionValue, $Options['DeliveryTerms']) && empty($VariationData['DeliveryTerms'])) $VariationData['DeliveryTerms'] = $Value; 770 } 771 } 772 } 773 } 774 if (is_array($variation_data['meta_data'])) { 775 foreach ($variation_data['meta_data'] as $MetaField) { 776 $MetaField = $MetaField->get_data(); 777 $Key = 'meta_'.$MetaField['key']; 778 if (in_array($Key, $Options['Brand']) && empty($ProductData['Brand'])) $ProductData['Brand'] = $MetaField['value']; 779 if (in_array($Key, $Options['EAN']) && empty($VariationData['EAN'])) $VariationData['EAN'] = $MetaField['value']; 780 if (in_array($Key, $Options['Color']) && empty($VariationData['Color'])) $VariationData['Color'] = $MetaField['value']; 781 if (in_array($Key, $Options['Season']) && empty($ProductData['Season'])) $ProductData['Season'] = $MetaField['value']; 782 if (in_array($Key, $Options['Gender']) && empty($VariationData['Gender'])) $VariationData['Gender'] = $MetaField['value']; 783 if (in_array($Key, $Options['Material']) && empty($VariationData['Material'])) $VariationData['Material'] = $MetaField['value']; 784 if (in_array($Key, $Options['Condition']) && empty($VariationData['Condition'])) $VariationData['Condition'] = $MetaField['value']; 785 if (in_array($Key, $Options['DeliveryTerms']) && empty($VariationData['DeliveryTerms'])) $VariationData['DeliveryTerms'] = $MetaField['value']; 786 } 787 } 788 if (empty($VariationData['EAN'])) $VariationData['EAN'] = $ProductEAN; 789 if (empty($VariationData['SKU'])) $VariationData['SKU'] = $ProductData['SKU']; 790 if (empty($VariationData['Color'])) $VariationData['Color'] = $ProductColor; 791 if (empty($VariationData['Gender'])) $VariationData['Gender'] = $ProductGender; 792 if (empty($VariationData['Material'])) $VariationData['Material'] = $ProductMaterial; 793 if (empty($VariationData['Condition'])) $VariationData['Condition'] = $ProductCondition; 794 if (empty($VariationData['DeliveryTerms'])) $VariationData['DeliveryTerms'] = $ProductDeliveryTerms; 742 $this->SetAdditionalData($ProductID, $variation_data, $Options, $ProductData, $VariationData); 795 743 $ProductData['Variations'][] = $VariationData; 796 744 } … … 815 763 "Currency" => $Currency 816 764 ), 817 "Stock" => (int) $Product->get_stock_quantity(),765 "Stock" => (int)(($Product->get_manage_stock()) ? $Product->get_stock_quantity() : $Product->get_stock_status() == 'instock'), 818 766 "Images" => $ProductData['Images'], 819 767 "CustomFields" => $this->GetCustomFields($Product, 'product'), 820 768 "Updated" => $ProductData['Updated'], 821 769 ); 770 $this->SetAdditionalData($ProductID, $Product->get_data(), $Options, $ProductData, $VariationData); 822 771 $ProductData['Variations'][] = $VariationData; 772 } 773 foreach ($ProductData['Variations'] as &$Variation) { 774 if (empty($Variation['EAN'])) $Variation['EAN'] = $ProductEAN; 775 if (empty($Variation['SKU'])) $Variation['SKU'] = $ProductData['SKU']; 776 if (empty($Variation['Color'])) $Variation['Color'] = $ProductColor; 777 if (empty($Variation['Gender'])) $Variation['Gender'] = $ProductGender; 778 if (empty($Variation['Material'])) $Variation['Material'] = $ProductMaterial; 779 if (empty($Variation['Condition'])) $Variation['Condition'] = $ProductCondition; 780 if (empty($Variation['DeliveryTerms'])) $Variation['DeliveryTerms'] = $ProductDeliveryTerms; 823 781 } 824 782 $Products[] = $ProductData; … … 833 791 } 834 792 793 private function SetAdditionalData($ProductID, $Data, $Options, &$ProductData, &$VariationData) { 794 if (is_array($Data['attributes'])) { 795 foreach ($Data['attributes'] as $attr_name => $attr_value) { 796 if (in_array($attr_name, $Options['Sizes'])) { 797 if (empty($VariationData['Size'])) $VariationData['Size'] = $this->ResolveAttributeValue($attr_value); 798 else $VariationData['Size'] .= " ".$this->ResolveAttributeValue($attr_value); 799 } 800 if (in_array($attr_name, $Options['Brand']) && empty($ProductData['Brand'])) $ProductData['Brand'] = $this->ResolveAttributeValue($attr_value);; 801 if (in_array($attr_name, $Options['EAN']) && empty($VariationData['EAN'])) $VariationData['EAN'] = $this->ResolveAttributeValue($attr_value);; 802 if (in_array($attr_name, $Options['Color']) && empty($VariationData['Color'])) $VariationData['Color'] = $this->ResolveAttributeValue($attr_value);; 803 if (in_array($attr_name, $Options['Season']) && empty($ProductData['Season'])) $ProductData['Season'] = $this->ResolveAttributeValue($attr_value);; 804 if (in_array($attr_name, $Options['Gender']) && empty($VariationData['Gender'])) $VariationData['Gender'] = $this->ResolveAttributeValue($attr_value);; 805 if (in_array($attr_name, $Options['Material']) && empty($VariationData['Material'])) $VariationData['Material'] = $this->ResolveAttributeValue($attr_value);; 806 if (in_array($attr_name, $Options['Condition']) && empty($VariationData['Condition'])) $VariationData['Condition'] = $this->ResolveAttributeValue($attr_value);; 807 if (in_array($attr_name, $Options['DeliveryTerms']) && empty($VariationData['DeliveryTerms'])) $VariationData['DeliveryTerms'] = $this->ResolveAttributeValue($attr_value);; 808 } 809 } 810 foreach (array_keys($Options) as $Key) { 811 $OptionValues = $Options[$Key]; 812 if (!is_array($OptionValues)) $OptionValues = array($OptionValues); 813 foreach ($OptionValues as $OptionValue) { 814 $Terms = wp_get_post_terms($ProductID, $OptionValue); 815 if (!empty($Terms)) { 816 $Terms = wp_list_pluck($Terms, 'name'); 817 if (!empty($Terms)) { 818 $Value = implode(' ', $Terms); 819 $OptionValue = 'category_'.$OptionValue; 820 if (in_array($OptionValue, $Options['Brand']) && empty($ProductData['Brand'])) $ProductData['Brand'] = $Value; 821 if (in_array($OptionValue, $Options['EAN']) && empty($VariationData['EAN'])) $VariationData['EAN'] = $Value; 822 if (in_array($OptionValue, $Options['Color']) && empty($VariationData['Color'])) $VariationData['Color'] = $Value; 823 if (in_array($OptionValue, $Options['Season']) && empty($ProductData['Season'])) $ProductData['Season'] = $Value; 824 if (in_array($OptionValue, $Options['Gender']) && empty($VariationData['Gender'])) $VariationData['Gender'] = $Value; 825 if (in_array($OptionValue, $Options['Material']) && empty($VariationData['Material'])) $VariationData['Material'] = $Value; 826 if (in_array($OptionValue, $Options['Condition']) && empty($VariationData['Condition'])) $VariationData['Condition'] = $Value; 827 if (in_array($OptionValue, $Options['DeliveryTerms']) && empty($VariationData['DeliveryTerms'])) $VariationData['DeliveryTerms'] = $Value; 828 } 829 } 830 } 831 } 832 if (is_array($Data['meta_data'])) { 833 foreach ($Data['meta_data'] as $MetaField) { 834 $MetaField = $MetaField->get_data(); 835 $Key = 'meta_'.$MetaField['key']; 836 if (in_array($Key, $Options['Brand']) && empty($ProductData['Brand'])) $ProductData['Brand'] = $MetaField['value']; 837 if (in_array($Key, $Options['EAN']) && empty($VariationData['EAN'])) $VariationData['EAN'] = $MetaField['value']; 838 if (in_array($Key, $Options['Color']) && empty($VariationData['Color'])) $VariationData['Color'] = $MetaField['value']; 839 if (in_array($Key, $Options['Season']) && empty($ProductData['Season'])) $ProductData['Season'] = $MetaField['value']; 840 if (in_array($Key, $Options['Gender']) && empty($VariationData['Gender'])) $VariationData['Gender'] = $MetaField['value']; 841 if (in_array($Key, $Options['Material']) && empty($VariationData['Material'])) $VariationData['Material'] = $MetaField['value']; 842 if (in_array($Key, $Options['Condition']) && empty($VariationData['Condition'])) $VariationData['Condition'] = $MetaField['value']; 843 if (in_array($Key, $Options['DeliveryTerms']) && empty($VariationData['DeliveryTerms'])) $VariationData['DeliveryTerms'] = $MetaField['value']; 844 } 845 } 846 } 847 835 848 private function ResolveAttributeValue($Value) { 836 global $wpdb;849 if (is_object($Value)) $Value = $Value->get_name(); 837 850 if (!isset($this->AttributeDisplayValues[$Value])) { 851 global $wpdb; 838 852 $Term = $wpdb->get_results($wpdb->prepare("SELECT name FROM $wpdb->terms WHERE slug = %s", $Value), 'OBJECT'); 839 853 if (isset($Term[0]) && isset($Term[0]->name)) $this->AttributeDisplayValues[$Value] = $Term[0]->name; -
product-feeder/trunk/product-feeder.php
r3155092 r3165618 5 5 * Plugin URI: https://product-feeder.com/nl/sources/wordpress-woocommerce 6 6 * Description: Connect with various marketplaces for automated synchronization of products, orders and returns! Try it now at https://product-feeder.com 7 * Version: 2. 5.37 * Version: 2.6.0 8 8 * Author: Product Feeder 9 9 * Author URI: https://product-feeder.com -
product-feeder/trunk/readme.txt
r3155084 r3165618 5 5 Requires at least: 6.0 6 6 Tested up to: 6.4 7 Stable tag: 2. 5.37 Stable tag: 2.6.0 8 8 Requires PHP: 7.4 9 9 License: GPLv2 or later … … 147 147 = 2.5.3 = 148 148 * Added multiple field-options for EAN data 149 150 = 2.6.0 = 151 * Various data changes
Note: See TracChangeset
for help on using the changeset viewer.