Plugin Directory

Changeset 3165618


Ignore:
Timestamp:
10/09/2024 10:21:47 AM (18 months ago)
Author:
productfeeder
Message:

Updated to version 2.6.0

Location:
product-feeder
Files:
11 added
3 edited

Legend:

Unmodified
Added
Removed
  • product-feeder/trunk/includes/product-feeder.php

    r3155110 r3165618  
    140140                    $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');
    141141                    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;
    143143                        $Options[__('Meta field', 'product-feeder')]['meta_'.$metafield] = $metafield;
    144144                    }
     
    528528                                    $CustomFields['Attributes'][$this->AttributeTaxonomies[$attr_name_short]] = array();
    529529                                    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                                        }
    531534                                        if (isset($this->AttributeValues[$term_id])) $CustomFields['Attributes'][$this->AttributeTaxonomies[$attr_name_short]][] = $this->AttributeValues[$term_id];
    532535                                    }
     
    632635                        $ProductDeliveryTerms = '';
    633636                        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;
    639652                                }
    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;
    647653                            }
    648654                        }
     
    729735                                            "Currency"  => $Currency
    730736                                        ),
    731                                         "Stock" => (int)$variation_data['stock_quantity'],
     737                                        "Stock" => (int)(($Variation->get_manage_stock()) ? $Variation->get_stock_quantity() : $Variation->get_stock_status() == 'instock'),
    732738                                        "Images" => $ImageLinks,
    733739                                        "CustomFields" => $this->GetCustomFields($Variation, 'variation'),
    734740                                        "Updated" => get_the_modified_date('Y-m-d\TH:i:sT', $VariationID),
    735741                                    );
    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);
    795743                                    $ProductData['Variations'][] = $VariationData;
    796744                                }
     
    815763                                    "Currency" => $Currency
    816764                                ),
    817                                 "Stock" => (int)$Product->get_stock_quantity(),
     765                                "Stock" => (int)(($Product->get_manage_stock()) ? $Product->get_stock_quantity() : $Product->get_stock_status() == 'instock'),
    818766                                "Images" => $ProductData['Images'],
    819767                                "CustomFields" => $this->GetCustomFields($Product, 'product'),
    820768                                "Updated" => $ProductData['Updated'],
    821769                            );
     770                            $this->SetAdditionalData($ProductID, $Product->get_data(), $Options, $ProductData, $VariationData);
    822771                            $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;
    823781                        }
    824782                        $Products[] = $ProductData;
     
    833791        }
    834792
     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
    835848        private function ResolveAttributeValue($Value) {
    836             global $wpdb;
     849            if (is_object($Value)) $Value = $Value->get_name();
    837850            if (!isset($this->AttributeDisplayValues[$Value])) {
     851                global $wpdb;
    838852                $Term = $wpdb->get_results($wpdb->prepare("SELECT name FROM $wpdb->terms WHERE slug = %s", $Value), 'OBJECT');
    839853                if (isset($Term[0]) && isset($Term[0]->name)) $this->AttributeDisplayValues[$Value] = $Term[0]->name;
  • product-feeder/trunk/product-feeder.php

    r3155092 r3165618  
    55    * Plugin URI:       https://product-feeder.com/nl/sources/wordpress-woocommerce
    66    * 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.3
     7    * Version:          2.6.0
    88    * Author:           Product Feeder
    99    * Author URI:       https://product-feeder.com
  • product-feeder/trunk/readme.txt

    r3155084 r3165618  
    55Requires at least: 6.0
    66Tested up to: 6.4
    7 Stable tag: 2.5.3
     7Stable tag: 2.6.0
    88Requires PHP: 7.4
    99License: GPLv2 or later
     
    147147= 2.5.3 =
    148148* 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.