diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 0b00a875b..c058cc1b4 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,9 +8,10 @@ List any dependencies that are required for this change. Please delete options that are not relevant. -- [ ] Bug fix (non-breaking change which fixes an issue) -- [ ] New feature (non-breaking change which adds functionality) -- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- Bug fix (non-breaking change which fixes an issue) +- New feature (non-breaking change which adds functionality) +- Syntax change (non-breaking change which fixes code modularity, linting or phpcs issues) +- Breaking change (fix or feature that would cause existing functionality to not work as expected) ## Screenshots @@ -29,10 +30,13 @@ Please also list any relevant details for your test configuration. ## Checklist -- [ ] I followed general Pull Request best practices. Meta employees to follow this [wiki]([url](https://fburl.com/wiki/2cgfduwc)) -- [ ] I have commented my code, particularly in hard-to-understand areas -- [ ] I have added tests and all the new and existing unit tests pass locally with my changes -- [ ] I have completed dogfooding and QA testing, or I have conducted thorough due diligence to ensure that it does not break existing functionality. +- [] I have commented my code, particularly in hard-to-understand areas. +- [] I have confirmed that my changes do not introduce any new PHPCS warnings or errors. +- [] I have checked plugin debug logs that my changes do not introduce any new PHP warnings or FATAL errors. +- [] I followed general Pull Request best practices. Meta employees to follow this [wiki]([url](https://fburl.com/wiki/2cgfduwc)). +- [] I have added tests (if necessary) and all the new and existing unit tests pass locally with my changes. +- [] I have completed dogfooding and QA testing, or I have conducted thorough due diligence to ensure that it does not break existing functionality. +- [] I have updated or requested update to plugin documentations (if necessary). Meta employees to follow this [wiki]([url](https://fburl.com/wiki/nhx73tgs)). ## Changelog entry diff --git a/bin/fb_google_category_to_attribute_mapping.json b/bin/fb_google_category_to_attribute_mapping.json index 6cdbc2c00..5047d104a 100644 --- a/bin/fb_google_category_to_attribute_mapping.json +++ b/bin/fb_google_category_to_attribute_mapping.json @@ -104118,7 +104118,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -104135,8 +104135,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -104651,7 +104650,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -104668,8 +104667,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -105184,7 +105182,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -105201,8 +105199,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -105717,7 +105714,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -105734,8 +105731,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -106250,7 +106246,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -106267,8 +106263,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -106783,7 +106778,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -106800,8 +106795,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -107316,7 +107310,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -107333,8 +107327,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -107849,7 +107842,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -107866,8 +107859,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -108382,7 +108374,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -108399,8 +108391,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -108915,7 +108906,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -108932,8 +108923,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -109448,7 +109438,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -109465,8 +109455,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -109981,7 +109970,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -109998,8 +109987,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -110514,7 +110502,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -110531,8 +110519,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -111047,7 +111034,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -111064,8 +111051,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -111580,7 +111566,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -111597,8 +111583,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -112113,7 +112098,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -112130,8 +112115,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -112646,7 +112630,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -112663,8 +112647,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -113179,7 +113162,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -113196,8 +113179,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -113712,7 +113694,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -113729,8 +113711,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -114245,7 +114226,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -114262,8 +114243,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -114778,7 +114758,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -114795,8 +114775,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -115311,7 +115290,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -115328,8 +115307,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -115844,7 +115822,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -115861,8 +115839,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -116377,7 +116354,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -116394,8 +116371,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -116910,7 +116886,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -116927,8 +116903,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -117443,7 +117418,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -117460,8 +117435,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -117976,7 +117950,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -117993,8 +117967,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -118509,7 +118482,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -118526,8 +118499,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -119042,7 +119014,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -119059,8 +119031,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -119575,7 +119546,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -119592,8 +119563,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -120108,7 +120078,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -120125,8 +120095,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -120641,7 +120610,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -120658,8 +120627,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -121174,7 +121142,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -121191,8 +121159,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -121707,7 +121674,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -121724,8 +121691,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -122240,7 +122206,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -122257,8 +122223,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -122773,7 +122738,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -122790,8 +122755,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -123306,7 +123270,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -123323,8 +123287,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -123839,7 +123802,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -123856,8 +123819,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -124372,7 +124334,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -124389,8 +124351,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -124905,7 +124866,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -124922,8 +124883,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -125438,7 +125398,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -125455,8 +125415,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -125971,7 +125930,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -125988,8 +125947,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -126504,7 +126462,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -126521,8 +126479,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -127037,7 +126994,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -127054,8 +127011,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -127570,7 +127526,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -127587,8 +127543,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -128103,7 +128058,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -128120,8 +128075,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -128636,7 +128590,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -128653,8 +128607,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -129169,7 +129122,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -129186,8 +129139,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -129702,7 +129654,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -129719,8 +129671,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -130235,7 +130186,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -130252,8 +130203,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -130768,7 +130718,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -130785,8 +130735,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -131301,7 +131250,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -131318,8 +131267,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -131834,7 +131782,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -131851,8 +131799,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -132367,7 +132314,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -132384,8 +132331,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -132900,7 +132846,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -132917,8 +132863,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -133433,7 +133378,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -133450,8 +133395,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -133966,7 +133910,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -133983,8 +133927,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -134499,7 +134442,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -134516,8 +134459,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -135032,7 +134974,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -135049,8 +134991,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -135565,7 +135506,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -135582,8 +135523,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -136098,7 +136038,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -136115,8 +136055,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -136631,7 +136570,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -136648,8 +136587,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -137164,7 +137102,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -137181,8 +137119,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -137697,7 +137634,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -137714,8 +137651,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -138230,7 +138166,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -138247,8 +138183,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -138763,7 +138698,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -138780,8 +138715,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -139296,7 +139230,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -139313,8 +139247,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -139829,7 +139762,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -139846,8 +139779,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -140362,7 +140294,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -140379,8 +140311,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -140895,7 +140826,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -140912,8 +140843,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -141428,7 +141358,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -141445,8 +141375,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -141961,7 +141890,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -141978,8 +141907,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -142494,7 +142422,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -142511,8 +142439,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -143027,7 +142954,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -143044,8 +142971,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -143560,7 +143486,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -143577,8 +143503,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -144093,7 +144018,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -144110,8 +144035,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -144626,7 +144550,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -144643,8 +144567,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -145159,7 +145082,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -145176,8 +145099,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -145692,7 +145614,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -145709,8 +145631,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -146225,7 +146146,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -146242,8 +146163,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -146758,7 +146678,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -146775,8 +146695,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -147291,7 +147210,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -147308,8 +147227,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -147824,7 +147742,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -147841,8 +147759,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -148357,7 +148274,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -148374,8 +148291,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -148890,7 +148806,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -148907,8 +148823,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -149423,7 +149338,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -149440,8 +149355,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -149956,7 +149870,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -149973,8 +149887,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -150489,7 +150402,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -150506,8 +150419,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -151022,7 +150934,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -151039,8 +150951,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -151555,7 +151466,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -151572,8 +151483,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -152088,7 +151998,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -152105,8 +152015,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -152621,7 +152530,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -152638,8 +152547,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -153154,7 +153062,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -153171,8 +153079,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -153687,7 +153594,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -153704,8 +153611,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -154220,7 +154126,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -154237,8 +154143,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -154753,7 +154658,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -154770,8 +154675,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -155286,7 +155190,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -155303,8 +155207,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -155819,7 +155722,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -155836,8 +155739,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -156352,7 +156254,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -156369,8 +156271,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -156885,7 +156786,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -156902,8 +156803,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -157418,7 +157318,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -157435,8 +157335,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -157951,7 +157850,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -157968,8 +157867,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -158484,7 +158382,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -158501,8 +158399,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -159017,7 +158914,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -159034,8 +158931,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -159550,7 +159446,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -159567,8 +159463,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -160083,7 +159978,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -160100,8 +159995,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -160616,7 +160510,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -160633,8 +160527,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -161149,7 +161042,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -161166,8 +161059,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -161682,7 +161574,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -161699,8 +161591,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -162215,7 +162106,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -162232,8 +162123,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -162748,7 +162638,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -162765,8 +162655,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -163281,7 +163170,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -163298,8 +163187,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -163814,7 +163702,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -163831,8 +163719,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -164347,7 +164234,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -164364,8 +164251,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -164880,7 +164766,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -164897,8 +164783,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -165413,7 +165298,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -165430,8 +165315,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -165946,7 +165830,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -165963,8 +165847,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -166479,7 +166362,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -166496,8 +166379,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -183953,7 +183835,7 @@ "fieldname": "SkirtLength", "key": "skirt_length", "recommended": false, - "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." + "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." }, { "type": "measurement", @@ -183970,8 +183852,7 @@ "fieldname": "SleeveLength", "key": "sleeve_length", "recommended": false, - "description": "The numeric length value of skirts from waist to bottom. Does not include style values like Maxi." - }, + "description": "The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve." }, { "type": "enum", "example": "3\/4 Sleeve", @@ -938052,4 +937933,4 @@ } ] } -} +} \ No newline at end of file diff --git a/changelog.txt b/changelog.txt index 97c59c7e4..33c9ec8ac 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,30 @@ *** Facebook for WooCommerce Changelog *** += 3.4.7 - 2025-04-17 = +* Tweak - Added external_variant_id to the feed file by @mshymon in #2998 +* Tweak - Added support for syncing product type by @vinkmeta in #3013 +* Tweak - Relocating bulk actions by @SayanPandey in #2943 +* Tweak - Filtration on All Products page | Synced and Not Synced by @SayanPandey in #2999 +* Tweak - Updated PR Template by @vinkmeta in #3019 +* Fix - Null check exceptions by @vinkmeta in #3015 +* Tweak - Relaxing sync validations by @raymon1 in #2969 +* Tweak - Truncates extra characters from title and description by @raymon1 in #3023 +* Tweak - Updated PR template by @vinkmeta in #3053 +* Fix - The item not found error by using filter in the product endpoint @vinkmeta in #3054 +* Fix - Bug where MPN input box had no tooltip by @devbodaghe in #3034 +* Tweak - Investigation: WooCommerce to Facebook Product Attribute Syncing by @devbodaghe in #3033 +* Fix - Add parent product material inheritance for variations by @devbodaghe in #3035 +* Fix - Tooltip Messages for Skirt Length and Sleeve Length by @devbodaghe in #3039 +* Fix - Typo in Admin.php by @SayanPandey in #3063 +* Add - Add separate short_description field to Facebook product data by @devbodaghe in #3029 +* Tweak - Sync short description remove dropdown by @devbodaghe in #3031 +* Tweak - Short Description Fallback by @devbodaghe in #3048 +* Fix - A problem where Purchase event was not firing if thankyou page was not shown or Purchase state updated through Woo dashboard by @vahidkay-meta in #3060 +* Tweak - Remove type casting for gpc to int by @devbodaghe in 3078 +* Tweak - Disable unmapped fields to batch api by @devbodaghe in #3079 +* Fix - Product variation fields not saving correctly by @devbodaghe in #3090 +* Fix - Removed failing test due to merge conflicts @vinkmeta in #3103 + = 3.4.6 - 2025-04-04 = * Fix - Product availability syncing by @vinkmeta in #3010 * Fix - Product attribute sort error which prevented product edits in certain scenarios by @iodic in #3012 diff --git a/data/google_category_to_attribute_mapping_fields.json b/data/google_category_to_attribute_mapping_fields.json index 32e8481b4..b21e47454 100644 --- a/data/google_category_to_attribute_mapping_fields.json +++ b/data/google_category_to_attribute_mapping_fields.json @@ -1 +1 @@ -{"5773e3cf8b57a590831b2fa4966071b7":{"key":"gender","fieldname":"Gender","recommended":false,"type":"enum","description":"Gender the product item is targeted towards","enum_values":["female","male","unisex"],"can_have_unknown_value":false},"48f499603e045536424c8db9e2b51338":{"key":"brand","fieldname":"Brand","recommended":false,"type":"string","description":"Brand name, unique manufacturer part number (MPN), or Global Trade Item Number (GTIN) of the item."},"e44fa2f9d73d8394fc19e11bda594270":{"key":"color","fieldname":"Color","recommended":false,"type":"string","description":"Color of the product item"},"3c93dcbe5e2427633884455f8fdf3d0a":{"key":"size","fieldname":"size","recommended":false,"type":"string","description":"Size of the product item"},"14360682ab38bda0c27cd410da1ddb93":{"key":"pattern","fieldname":"Pattern","recommended":false,"type":"string","description":"Pattern of the product item"},"57a5027e44183e4bee60fd79e0f72215":{"key":"material","fieldname":"Material","recommended":false,"type":"string","description":"Material of the product item"},"536559919dfbf7c806f82836c7b6ace0":{"key":"age_group","fieldname":"AgeGroup","recommended":false,"type":"enum","description":"Age group the product item is targeted towards","enum_values":["adult","all ages","infant","kids","newborn","teen","toddler"],"can_have_unknown_value":false},"fdbb66325f7179c53e0d013f85a8f1bb":{"key":"material","fieldname":"Material","recommended":true,"type":"string","description":"Material of the product item"},"56beea7a921d2d0a4b65bcb91de4619f":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MinimumWeight","key":"minimum_weight","recommended":true,"description":"The lower weight limit or capability of an item,often used in conjunction with \"Maximum Weight\".The meaning varies with context of product.For example, when used with \"Maximum Weight\",this attribute provides weight ranges for a range of productsincluding pet medicine, baby carriers and outdoor play structures."},"b4e2ba079a90aafe22d7b40a27a8a86b":{"type":"string","example":"1-3 Years","can_have_multiple_values":false,"fieldname":"AgeRange","key":"age_range","recommended":true,"description":"Minimum and Maximum Ages for a product. Note: the unit of measure in\n Months, or Years."},"d86e410dc0b595fa52c8071297df164e":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductWidth","key":"product_width","recommended":true,"description":"The width of the fully assembled product."},"fb29eb2f1bed6b57202be5766b13a012":{"key":"color","fieldname":"Color","recommended":true,"type":"string","description":"Color of the product item"},"6f6763dc75294a1700c3325ed0e01501":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductLength","key":"product_length","recommended":true,"description":"The length of the fully assembled product."},"a125082f8b596fd6a3fc4ef69aac4ce9":{"key":"gender","fieldname":"Gender","recommended":true,"type":"enum","description":"Gender the product item is targeted towards","enum_values":["female","male","unisex"],"can_have_unknown_value":false},"b77f4835261839838cf7da93a4397624":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductHeight","key":"product_height","recommended":true,"description":"The height of the fully assembled product"},"fab78b5f78ea9c6822f0efd4b76812c7":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MaximumWeight","key":"maximum_weight","recommended":true,"description":"The upper weight limit or capability of an item,often used in conjunction with \"Minimum Weight\".The meaning varies with context of product.For example, when used with \"Minimum Weight\",this attribute provides weight ranges for a range of productsincluding pet medicine, baby carriers and outdoor play structures."},"c33d8f504a0d16cc768948032b96bb86":{"type":"string","example":["Waterproof"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"75d33e09027a3e497cd7f4871c44d0ad":{"type":"string","example":"Shape Identification","can_have_multiple_values":false,"fieldname":"EducationalFocus","key":"educational_focus","recommended":false,"description":"Describes the educational skills that the product is intended to improve"},"a61b31aad2b1cff7a5e059435aa0c079":{"type":"string","example":"Chewbacca","can_have_multiple_values":false,"fieldname":"Character","key":"character","recommended":false,"description":"The particular character, person or entity that your item represents or is associated with."},"186773615b385aea09f78bf7846c2da2":{"type":"string","example":"Space","can_have_multiple_values":false,"fieldname":"Theme","key":"theme","recommended":false,"description":"The particular subject, theme or idea that your item represents or is associated with."},"f0cc9df58632d42a9f64e187e36822ac":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsAssemblyRequired","key":"is_assembly_required","recommended":true,"description":"Indicates if the product arrives unassembledand must be put together before use."},"18213b9375e78464379a596bc5a12105":{"type":"string","example":"jogging","can_have_multiple_values":false,"fieldname":"StrollerType","key":"stroller_type","recommended":false,"description":"Prominent stroller styles."},"e294d165c14bf93d4ff9d565c45b86f0":{"type":"enum","example":["Foldable"],"can_have_multiple_values":true,"enum_values":["Foldable"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"09e6b8670b86e122237dee1d1948f5e3":{"type":"string","example":"3-point harness","can_have_multiple_values":false,"fieldname":"SafetyHarnessStyle","key":"safety_harness_style","recommended":false,"description":"The style of the occupant restraint harness included with the car\n seat, stroller, carrier, etc."},"5a781cf5acf5b20a3457889ab0719688":{"type":"integer","example":1,"can_have_multiple_values":false,"fieldname":"NumberOfSeats","key":"number_of_seats","recommended":false,"description":"The number of people that can be accommodated by the\n available seats of an item."},"acb1aef05b9c5b358e8d767422053a0c":{"type":"string","example":"Convertible Car Seats","can_have_multiple_values":false,"fieldname":"ChildCarSeatStyle","key":"child_car_seat_style","recommended":false,"description":"Prominent car seat styles."},"84520363ef89687443e2b75aac0ca2a4":{"type":"string","example":"3 ft","can_have_multiple_values":false,"fieldname":"CarSeatMaxChildHeight","key":"car_seat_max_child_height","recommended":false,"description":"The maximum height of the child occupant as given by the\n manufacturer, measured in inches or centimeters."},"9d014a512c1e3019550901b0c0494ff4":{"type":"string","example":"Forward-Facing","can_have_multiple_values":false,"fieldname":"CarSeatFacingDirection","key":"car_seat_facing_direction","recommended":false,"description":"Which direction the car seat faces."},"c139a1077e40bc1ed55105d8250cfbd7":{"type":"string","example":"sling","can_have_multiple_values":false,"fieldname":"BabyCarrierStyle","key":"baby_carrier_style","recommended":false,"description":"Prominent wearable baby carrier styles."},"de2ea24937f3cfb9d23a6184b6bb1717":{"type":"string","example":"front carry-facing in","can_have_multiple_values":false,"fieldname":"BabyCarrierPosition","key":"baby_carrier_position","recommended":false,"description":"Applies to wearable baby carriers. Describes the part of the body\n against which the child is placed along with the direction the child\n faces (where applicable) while in the wearable baby carrier."},"3e6c4c356607b43e111bc414a797367c":{"type":"integer","example":12,"can_have_multiple_values":false,"fieldname":"PackageQuantity","key":"package_quantity","recommended":true,"description":"The total number of items included in the package or box."},"b2e91b6002cde2bfa85933056e1fbab1":{"key":"size","fieldname":"size","recommended":true,"type":"string","description":"Size of the product item"},"e84c396def9cf6dfa460ad427e4086f1":{"type":"string","example":["Stop using if you experience swelling, rash, or fever"],"can_have_multiple_values":true,"fieldname":"StopUseIndications","key":"stop_use_indications","recommended":false,"description":"Information that describes symptoms or reactions that\n indicate when to stop using the product."},"f9f15a8a99459328f839fb1423283f15":{"type":"string","example":["Vanilla"],"can_have_multiple_values":true,"fieldname":"Scent","key":"scent","recommended":false,"description":"The scent or fragrance of your item; including items\n labelled as \"unscented\""},"ad4e681a4cf1c32d992b0119533bb4f3":{"type":"string","example":"Oil","can_have_multiple_values":false,"fieldname":"ProductForm","key":"product_form","recommended":false,"description":"The consistency, texture or formulation of the item and the way\n it will be consumed or dispensed."},"4ddda60fca4317fa3a260bc6a716eacb":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MaximumWeight","key":"maximum_weight","recommended":false,"description":"The upper weight limit or capability of an item,often used in conjunction with \"Minimum Weight\".The meaning varies with context of product.For example, when used with \"Minimum Weight\",this attribute provides weight ranges for a range of productsincluding pet medicine, baby carriers and outdoor play structures."},"9bf1fceb6bbc26681a6531a069d97089":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MinimumWeight","key":"minimum_weight","recommended":false,"description":"The lower weight limit or capability of an item,often used in conjunction with \"Maximum Weight\".The meaning varies with context of product.For example, when used with \"Maximum Weight\",this attribute provides weight ranges for a range of productsincluding pet medicine, baby carriers and outdoor play structures."},"1b2a0250577aa3367755a9d309396596":{"type":"string","example":["Apply to wet hair","Massage into scalp","Rinse thoroughly"],"can_have_multiple_values":true,"fieldname":"Instructions","key":"instructions","recommended":false,"description":"Detailed information telling how the product should be operated,\n assembled, or consumed."},"cb857165d244dc15e39ea8f1e8752ee8":{"type":"string","example":["some_string","other"],"can_have_multiple_values":true,"fieldname":"Ingredients","key":"ingredients","recommended":false,"description":"The list of all ingredients contained in an item, as found on the product label mandated by FDA guidelines."},"06824c1d350fd02b20f1ccb63dc70aa2":{"type":"string","example":"Cloth","can_have_multiple_values":false,"fieldname":"DiaperType","key":"diaper_type","recommended":false,"description":"Describes the type of diaper"},"fdb673fe23dcfd4e913ea68db30f1886":{"type":"enum","example":"Infant","can_have_multiple_values":false,"enum_values":["Newborn","Infant","Toddler"],"can_have_unknown_value":false,"fieldname":"BabyLifeStage","key":"baby_life_stage","recommended":false,"description":"Describes the life stage of the child"},"4a1709fc558601d050f61caacf1886f7":{"type":"string","example":"Stage 1","can_have_multiple_values":false,"fieldname":"BabyFoodStage","key":"baby_food_stage","recommended":true,"description":"Attribute designed to capture the generalized age grouping (commonly referred to as \"stage\") of a given baby food, as specified by manufacturer. Example descriptions: Stage 1 - Foods have a single ingredient and are pureed and generally contain about 2.5 oz of fruits, veggies or meats. Stage 2 - Foods are strained instead of pureed and have a combination of fruits or veggies instead of single ingredients, contain larger portions. Stage 3 - Foods are mashed and have more texture than the pureed foods and may have bits and chunks of meats or veggies."},"b5ab18b31d909d41c1dc88e00bac6e44":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductWidth","key":"product_width","recommended":false,"description":"The width of the fully assembled product."},"812cdd6be6bd77d8fae155eee4b5ca8e":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductLength","key":"product_length","recommended":false,"description":"The length of the fully assembled product."},"045b717bb79c0b39f9d17afd53120c44":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductHeight","key":"product_height","recommended":false,"description":"The height of the fully assembled product"},"666634cdd39d094fdf806ea000651fd9":{"type":"integer","example":12,"can_have_multiple_values":false,"fieldname":"PackageQuantity","key":"package_quantity","recommended":false,"description":"The total number of items included in the package or box."},"1f60a7e1c843194aef22644bdc923372":{"type":"string","example":["Yams"],"can_have_multiple_values":true,"fieldname":"Ingredients","key":"ingredients","recommended":false,"description":"The list of all ingredients contained in an item, as found on the product label mandated by FDA guidelines."},"0412c658ae5558750f3d8dcf73b35e2f":{"type":"string","example":["Cinnamon","Peppermint"],"can_have_multiple_values":true,"fieldname":"Flavor","key":"flavor","recommended":false,"description":"Describes the taste or flavor of the item, as described by the\n manufacturer. May be an important attribute for shoppers for items\n like dental products, medicine or baby foods."},"003aaedcb75e3bdf52a4a7c043bc83bf":{"type":"string","example":"Contains Peanuts","can_have_multiple_values":false,"fieldname":"Allergens","key":"allergens","recommended":false,"description":"Statement regarding any ingredients that may be food allergens, often written as \"Contains X\" or \"Manufactured in a facility which processes Y.\""},"f29ece641eb9d606c99f8ff1375cdafd":{"type":"string","example":16,"can_have_multiple_values":false,"fieldname":"Megapixels","key":"megapixels","recommended":true,"description":"Describes the resolution at which this item records images."},"198abe5c383734cf1f5c25725ad05626":{"type":"string","example":6,"can_have_multiple_values":false,"fieldname":"DigitalZoom","key":"digital_zoom","recommended":true,"description":"Describes the magnification power provided by a feature that electronically enlarges the image area"},"3c84275e3f255e24439d4d2acca1738c":{"type":"string","example":10,"can_have_multiple_values":false,"fieldname":"OpticalZoom","key":"optical_zoom","recommended":true,"description":"Describes the magnification power of a physical optical zoom lens."},"5546fa0a68017a13c3d54f434b16e543":{"type":"string","example":"Lenovo Thinkpad","can_have_multiple_values":false,"fieldname":"Model","key":"model","recommended":true,"description":"The common name of the model of the product. Does not include model numbers."},"c4140fbb308019e33a32ebef93a21145":{"key":"brand","fieldname":"Brand","recommended":true,"type":"string","description":"Brand name, unique manufacturer part number (MPN), or Global Trade Item Number (GTIN) of the item."},"c73360481bac2974a2647239ba9ac090":{"type":"string","example":"USB 2.0","can_have_multiple_values":false,"fieldname":"USBTechnology","key":"u_s_b_technology","recommended":false,"description":"Describes the version of USB technology on the product."},"fb5d85a3717fff61798f843282121fc6":{"type":"enum","example":["Flash"],"can_have_multiple_values":true,"enum_values":["35mm Jack","Downloadable Content","Online Multiplayer","Touchscreen","Bluetooth","GPS","SIM","USB Connectivity","WLAN","Portable","Unlocked","Auto Document Feeder","Auto Two-Sided Printing","Energy Star Certified","Integrated Speakers","3D","Smart","Flash","Microphone","Red Eye Reduction"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"e52c7222866dfa79fb54fb46377f2dba":{"type":"string","example":"USB-C","can_have_multiple_values":false,"fieldname":"USBType","key":"u_s_b_type","recommended":false,"description":"Describes the type of USB connector on the product."},"a557ee533a27f6ba2ab2896f50128d2b":{"type":"string","example":["Portrait"],"can_have_multiple_values":true,"fieldname":"ShootingModes","key":"shooting_modes","recommended":false,"description":"Describes the available settings designed to accommodate different photographic situations."},"cb76a2503550b23c7e96374acff9974c":{"type":"string","example":250,"can_have_multiple_values":false,"fieldname":"MinimumShutterSpeed","key":"minimum_shutter_speed","recommended":false,"description":"Describes the minimum shutter speed of the item. Measured in seconds."},"dfa8888400db20a0c59123675195f680":{"type":"string","example":2,"can_have_multiple_values":false,"fieldname":"SelfTimerDelay","key":"self_timer_delay","recommended":false,"description":"Length of time in seconds the self-timer will allow before it\n takes a photo"},"80a2c75641a182aabe897e4d0c5c8ea2":{"type":"measurement","example":"42 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ScreenSize","key":"screen_size","recommended":false,"description":"Describes the measurement of the device's screen, typically measured diagonally in inches."},"4b71478ae3751b69220f8f35f0f65ab9":{"type":"string","example":"1\/2.3 in","can_have_multiple_values":false,"fieldname":"SensorResolution","key":"sensor_resolution","recommended":false,"description":"One specification describing the smallest detectable incremental change of input parameter that can be detected in the output signal. For digital cameras, image sensor resolution is an important factor for image quality."},"82aef4349fbc23a369243c604b574e3a":{"type":"string","example":"f\/16","can_have_multiple_values":false,"fieldname":"MinimumAperture","key":"minimum_aperture","recommended":false,"description":"The smallest aperture this item accommodates; typically expressed in f-numbers."},"73d65ceca095eeba210477fa2c3566ca":{"type":"string","example":"f\/5","can_have_multiple_values":false,"fieldname":"FocalRatio","key":"focal_ratio","recommended":false,"description":"Ratio of the lens's focal length, to the diameter of the entrance pupil. Also known as the f-number or f-stop, this number indicates lens speed."},"7518e31e367a461a82c93d537dc2c7da":{"type":"string","example":["iPad"],"can_have_multiple_values":true,"fieldname":"CompatibleDevices","key":"compatible_devices","recommended":false,"description":"Devices compatible with the item."},"ba6bb30e5d011b3182c2d01d3ec52356":{"type":"string","example":"HDMI","can_have_multiple_values":false,"fieldname":"ConnectorType","key":"connector_type","recommended":false,"description":"Describes the types of connections supported on the item."},"aaa86538e1892f9637b83693ea86da06":{"type":"string","example":"LCD","can_have_multiple_values":false,"fieldname":"DisplayTechnology","key":"display_technology","recommended":false,"description":"Describes the type of technology that powers the display, like LED or LCD."},"3f3305be9612e01d2d0b854c2e23dd0f":{"type":"string","example":"Built-in Camera","can_have_multiple_values":false,"fieldname":"FlashType","key":"flash_type","recommended":false,"description":"The type of flash the camera has or can accommodate."},"27ac044687275eca92c8ffc695dfcfac":{"type":"string","example":18,"can_have_multiple_values":false,"fieldname":"FocalLength","key":"focal_length","recommended":false,"description":"On a camera or lens, the distance between the image sensor and the lens when the subject is in focus,stated as a range in millimeters."},"b5dd74005f37c4313d88aaf9ec09a6ce":{"type":"measurement","example":"10 h","enum_values":["s","m","h","d"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"BatteryLife","key":"battery_life","recommended":false,"description":"Describes the total battery life (or maximum run time) of the item, typically measured in hours."},"25dd344c790ce67c74887cef8bf51bf9":{"type":"string","example":["Scratch-Resistant"],"can_have_multiple_values":true,"fieldname":"LensCoating","key":"lens_coating","recommended":false,"description":"Type of thin layer of material applied to the surface of lenses or other optical elements that provide specific effects."},"37ced536fc643daf19b3e78c6109d462":{"type":"string","example":49,"can_have_multiple_values":false,"fieldname":"LensDiameter","key":"lens_diameter","recommended":false,"description":"Measurement of the diameter of the front portion of the lens, measured in mm."},"fa1806a7580ccac912c41dc13a38f9f2":{"type":"string","example":"Cooling","can_have_multiple_values":false,"fieldname":"LensFilter","key":"lens_filter","recommended":false,"description":"Describes the kind of filter attached to a lens."},"ee8a6aaa75b14a3f55320e0ff3bf4e19":{"type":"string","example":"f\/1.4","can_have_multiple_values":false,"fieldname":"MaximumAperture","key":"maximum_aperture","recommended":false,"description":"Size of the largest aperture this item accommodates; typically expressed in f-numbers."},"2693162e8e03185c2f7147c2ed198794":{"type":"string","example":0.00025,"can_have_multiple_values":false,"fieldname":"MaximumShutterSpeed","key":"maximum_shutter_speed","recommended":false,"description":"Describes the maximum shutter speed of the item. Measured in seconds."},"2af16c00b68ea710c43881873f0c0eab":{"type":"string","example":["WiFi"],"can_have_multiple_values":true,"fieldname":"WirelessTechnologies","key":"wireless_technologies","recommended":false,"description":"Describes the types of wireless technologies that can be used by the product."},"1d70a2d3ce76a127d1ffb1b2f4209ac9":{"key":"age_group","fieldname":"AgeGroup","recommended":true,"type":"enum","description":"Age group the product item is targeted towards","enum_values":["adult","all ages","infant","kids","newborn","teen","toddler"],"can_have_unknown_value":false},"6d21b5b1295293a171d1c7d989e9db81":{"type":"string","example":["Bodycon"],"can_have_multiple_values":true,"fieldname":"Style","key":"style","recommended":true,"description":"The style(s) associated with the item."},"df971d2b5138c017068b1b1ca5fe7ff0":{"key":"pattern","fieldname":"Pattern","recommended":true,"type":"string","description":"Pattern of the product item"},"7992ac8898667c0ac4a874e914c71ec0":{"type":"string","example":["Designer","Embroidered"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"03321e77f42ca941c319d9d3a696e822":{"type":"string","example":"Flutter","can_have_multiple_values":false,"fieldname":"SleeveStyle","key":"sleeve_style","recommended":false,"description":"The style of sleeves. Does not include sleeve length styles."},"ef7cf809c0d3f3dde722b692949e8a82":{"type":"enum","example":"US","can_have_multiple_values":false,"enum_values":["US","UK","EU","DE","FR","JP","CN","IT","BR","MEX","AU"],"can_have_unknown_value":true,"fieldname":"SizeSystem","key":"size_system","recommended":false,"description":"The size system used by your item, usually corresponds to Country."},"891fd9d63794da9979642269ffdf2bdb":{"type":"measurement","example":"32 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"SkirtLength","key":"skirt_length","recommended":false,"description":"The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve."},"d0074b6e5f6d004d8b24dee11da5c838":{"type":"measurement","example":"32 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"SleeveLength","key":"sleeve_length","recommended":false,"description":"The numeric length value of skirts from waist to bottom. Does not include style values like Maxi."},"c49d53b2f6e3b840d1b3b36cf763b823":{"type":"enum","example":"3\/4 Sleeve","can_have_multiple_values":false,"enum_values":["3\/4 Sleeve","Long Sleeve","Short Sleeve","Sleeveless"],"can_have_unknown_value":true,"fieldname":"SleeveLengthStyle","key":"sleeve_length_style","recommended":false,"description":"The style of sleeve length. Does not include sleeve styles."},"ebc88b022a77d94e80822b572e926b7a":{"type":"string","example":["Tennis"],"can_have_multiple_values":true,"fieldname":"Sport","key":"sport","recommended":false,"description":"The particular sport or activity for which your item is intended."},"5db117ce3ae7225ccccb737276630902":{"type":"enum","example":"Ankle","can_have_multiple_values":false,"enum_values":["Ankle","Crew","Knee High","Mid Calf","No Show","Over the Knee","Thigh High"],"can_have_unknown_value":true,"fieldname":"SockRise","key":"sock_rise","recommended":false,"description":"The height style of socks."},"bde7f38a6a5fa76697d288227050040e":{"type":"string","example":["Golden State Warriors"],"can_have_multiple_values":true,"fieldname":"SportsLeague","key":"sports_league","recommended":false,"description":"The particular sports league that your item represents or is associated with."},"f87289e65273a3a8c33c2fd3dc5b6d4b":{"type":"string","example":["NFL"],"can_have_multiple_values":true,"fieldname":"SportsTeam","key":"sports_team","recommended":false,"description":"The particular sports team that your item represents or is associated with."},"a9dc83480290657ae724a1d0fe346563":{"type":"enum","example":["Water Resistant"],"can_have_multiple_values":true,"enum_values":["Waterproof","Water Resistant"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"790ed72ed6a00633b47d5959d9869e00":{"type":"string","example":"Racerback","can_have_multiple_values":false,"fieldname":"UpperBodyStrapConfiguration","key":"upper_body_strap_configuration","recommended":false,"description":"The strap style for items like tops, bras, and swimsuits."},"8b9b340f74a391da8163b1edfbaeeef9":{"type":"string","example":"Ultra High","can_have_multiple_values":false,"fieldname":"WaistRise","key":"waist_rise","recommended":false,"description":"The height where the waistline of the item lies on the body."},"ed9805103a40909dbd170d6a15d59e57":{"type":"measurement","example":"30 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"WaistSize","key":"waist_size","recommended":false,"description":"The numeric size of the waist for lower body garments. Does not include generic sizes like Small."},"59d583067536c9a9f0092ad4349b4107":{"type":"string","example":"Opaque","can_have_multiple_values":false,"fieldname":"Sheerness","key":"sheerness","recommended":false,"description":"The amount of sheerness or opacity of an item. Usually used for hosiery items."},"5917325df899badf730967031c51828e":{"type":"string","example":"Relaxed","can_have_multiple_values":false,"fieldname":"PantFit","key":"pant_fit","recommended":false,"description":"The general fit style of pants. Also applies to jeans."},"5d2faf8e7cd918c37585a3582ce67d41":{"type":"string","example":"Ankle","can_have_multiple_values":false,"fieldname":"PantLengthStyle","key":"pant_length_style","recommended":false,"description":"The length style of pants. Also applies to jeans & leggings."},"79d33c7a4244cde541284dffebd8af57":{"type":"string","example":["Distressed","Faded"],"can_have_multiple_values":true,"fieldname":"DenimFeatures","key":"denim_features","recommended":false,"description":"Features, embellishments & finishes that are specific to jeans."},"088788414687d075b58111bf0a9e6b28":{"type":"integer","example":32,"can_have_multiple_values":false,"fieldname":"BraBandSize","key":"bra_band_size","recommended":false,"description":"The band size of the bra."},"f8cd81278f0a424f4552e69119f8ce3e":{"type":"string","example":"A","can_have_multiple_values":false,"fieldname":"BraCupSize","key":"bra_cup_size","recommended":false,"description":"The cup size of the bra."},"3eb05a953435b526264c76134a8b02df":{"type":"measurement","example":"34 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ChestSize","key":"chest_size","recommended":false,"description":"The numeric size of the chest measurement for the item. Does not include generic sizes like Small."},"7951a620026294a95a0ac44f9ba71eee":{"type":"string","example":"Zipper","can_have_multiple_values":false,"fieldname":"Closure","key":"closure","recommended":false,"description":"The type of fastener used to close your item."},"114da48906462d334d5d7f59893d434d":{"type":"enum","example":"Big & Tall","can_have_multiple_values":false,"enum_values":["Big & Tall","Regular","Big Boys","Big Girls","Full Size","Little Boys","Little Girls","Petite","Plus","Maternity","Baby Boy","Baby Girls","Toddler Boys","Toddler Girls"],"can_have_unknown_value":true,"fieldname":"ClothingSizeType","key":"clothing_size_type","recommended":false,"description":"The general grouping of different sizes based on age & gender."},"e1cc3ced186fc459db4f1778dabbc6c0":{"type":"string","example":"Banded","can_have_multiple_values":false,"fieldname":"CollarStyle","key":"collar_style","recommended":false,"description":"The style of collar on your item."},"07a68126da1326bbb99e0ffd81455258":{"type":"string","example":["Do Not Iron","Dry Clean Only"],"can_have_multiple_values":true,"fieldname":"FabricCareInstructions","key":"fabric_care_instructions","recommended":false,"description":"The specific care instructions for how the fabric of your item should be cleaned. This can be found on the label of the item."},"c4398a3afbb4b58166ab7090026a1c5f":{"type":"string","example":"Boot Cut","can_have_multiple_values":false,"fieldname":"PantLegStyle","key":"pant_leg_style","recommended":false,"description":"The style or cut of pant legs. Also applies to jeans."},"8908691dbe1fc7cf9b8ec543a30ccf74":{"type":"measurement","example":"30 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Inseam","key":"inseam","recommended":false,"description":"The numeric size of the inseam for items like pants, jeans and leggings. Does not include generic sizes like Small."},"0c682655422cf862d012da48c74e9045":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsAdultProduct","key":"is_adult_product","recommended":false,"description":"Indicates if your product is sexually suggestive and intended only for adults."},"e32d81cb2795fb799d41e9beb75914a1":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsCostume","key":"is_costume","recommended":false,"description":"Indicates if the item is intended to be worn as a costume."},"044e1e8f4a2fb735e0f63e44c3217379":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsOutfitSet","key":"is_outfit_set","recommended":false,"description":"Indicates if the product has 2 or more different items that come as part of a matching or oufit set, like matching shirt & pants or bra & underwear set"},"11c967a5fc1a473d71ba4e8ac43d35c4":{"type":"string","example":"Acid Wash","can_have_multiple_values":false,"fieldname":"JeanWash","key":"jean_wash","recommended":false,"description":"The post-process wash treatment that may alter color or texture of denim products."},"f26b323c65bc8413143b53c424cb106c":{"type":"string","example":"Crew Neck","can_have_multiple_values":false,"fieldname":"Neckline","key":"neckline","recommended":false,"description":"The neckline or neck style of the item."},"efe63cfc2af39e9b3904b04f339137a8":{"type":"string","example":["Bridesmaid"],"can_have_multiple_values":true,"fieldname":"Occasion","key":"occasion","recommended":false,"description":"The type of special occassion(s) for which your item is intended or specialized."},"00efcecb28226b61fa715ceed2408546":{"type":"string","example":"Banded","can_have_multiple_values":false,"fieldname":"WaistStyle","key":"waist_style","recommended":false,"description":"The style of the waist on the item. Can apply to pants or dresses."},"f8b8550acb981fe24299736073b56104":{"type":"string","example":["Bow Tie"],"can_have_multiple_values":true,"fieldname":"Style","key":"style","recommended":true,"description":"The style(s) associated with the item."},"a53318a479999a52de362427c1af31da":{"type":"string","example":"Narrow","can_have_multiple_values":false,"fieldname":"SunglassesWidth","key":"sunglasses_width","recommended":false,"description":"The width of the sunglasses frame."},"422e14c47d8c95351a13574b5ffe3076":{"type":"string","example":"Anti-Reflective","can_have_multiple_values":false,"fieldname":"SunglassesLensTechnology","key":"sunglasses_lens_technology","recommended":false,"description":"The technology or treatment of sunglasses lenses."},"36415ae546c8d7681c9ede23fdc1ddc3":{"type":"enum","example":"Beige","can_have_multiple_values":false,"enum_values":["Beige","Black","Blue","Bronze","Brown","Gold","Gray","Green","Multi-Color","Orange","Pink","Purple","Red","Silver","White","Yellow"],"can_have_unknown_value":true,"fieldname":"SunglassesLensColor","key":"sunglasses_lens_color","recommended":false,"description":"The color of sunglasses lenses."},"70c39caa59cfd987167f972dd9aba990":{"type":"string","example":"Classic","can_have_multiple_values":false,"fieldname":"TieWidth","key":"tie_width","recommended":false,"description":"The width of tie."},"8125fc680ed8690436264f94a52dd4e9":{"type":"string","example":["Chukka"],"can_have_multiple_values":true,"fieldname":"Style","key":"style","recommended":true,"description":"The style(s) associated with the item."},"cd9f78020f15de834fcc58d3d563ebac":{"type":"string","example":"A","can_have_multiple_values":false,"fieldname":"ShoeWidth","key":"shoe_width","recommended":true,"description":"The width of the shoes."},"b0bd5a2777af18be80307b03175a050a":{"type":"enum","example":["Water Resistant"],"can_have_multiple_values":true,"enum_values":["Orthopedic","Waterproof","Water Resistant"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"30bc46e76de465db006632f51b9dc9bc":{"type":"enum","example":"Flats","can_have_multiple_values":false,"enum_values":["Flats","Boots","Heels","Sandals","Slippers","Athletic Shoes","Fashion Sneakers"],"can_have_unknown_value":true,"fieldname":"ShoeType","key":"shoe_type","recommended":false,"description":"The type of shoes."},"eb7731477ae172c98b8653d26038d351":{"type":"string","example":"Wedge","can_have_multiple_values":false,"fieldname":"HeelStyle","key":"heel_style","recommended":false,"description":"The style of heel on the shoes."},"9847453e3dfb3f97dd262911e96927fc":{"type":"measurement","example":"0.5 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"HeelHeight","key":"heel_height","recommended":false,"description":"The numeric height of the heel on the shoes."},"24cdfc97c883070990bfe53a9ab4fcc1":{"type":"string","example":["Hoops"],"can_have_multiple_values":true,"fieldname":"Style","key":"style","recommended":true,"description":"The style(s) associated with the item."},"ae3548dbfd62e601abeefe809b9804fe":{"type":"string","example":["Ruby","Emerald"],"can_have_multiple_values":true,"fieldname":"Gemstone","key":"gemstone","recommended":true,"description":"The type of gemstone(s) in your item."},"c2b8ee902fdca1b35815f183af905f6a":{"type":"string","example":["Vintage","Engraved"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"f0933d6a49ace1948a6f904be052d459":{"type":"enum","example":["Resizable"],"can_have_multiple_values":true,"enum_values":["Resizable","Water Resistant"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"0a55223a8807dfafc4e957899053f571":{"type":"string","example":"Silver","can_have_multiple_values":false,"fieldname":"PlatingMaterial","key":"plating_material","recommended":false,"description":"The type of metal or material which your item is plated or covered with."},"deb41e4835824a3ada806d318df5ffe0":{"type":"string","example":"14k","can_have_multiple_values":false,"fieldname":"MetalStampOrPurity","key":"metal_stamp_or_purity","recommended":false,"description":"The metal purity of your item. Sometimes this is indicated or stamped directly onto jewelry items."},"6e7562a9f0a1c4675f7ca5d15cf53e6a":{"type":"string","example":"2 prong","can_have_multiple_values":false,"fieldname":"JewelrySettingStyle","key":"jewelry_setting_style","recommended":false,"description":"The style in which stones are set within or attached to a piece of jewelry"},"f0f118d833eecf0a3d4deb47ce1e8a2a":{"type":"string","example":["Best Friends Forever"],"can_have_multiple_values":true,"fieldname":"Inscription","key":"inscription","recommended":false,"description":"The text of what is engraved on the item. (Multiple Values Accepted)"},"3ed35b95494c9b3f2985fdb9dff7730d":{"type":"string","example":1.29,"can_have_multiple_values":false,"fieldname":"GemstoneWeight","key":"gemstone_weight","recommended":false,"description":"The total weight or mass (in carats) of the individual gemstone."},"58ba4a0325e3756373a8383a2bc5377d":{"type":"string","example":5,"can_have_multiple_values":false,"fieldname":"GemstoneWidth","key":"gemstone_width","recommended":false,"description":"The width measurement of the gemstone in milimeters."},"8e0135de1890e1bc54c6f4524d2bb6a1":{"type":"string","example":["Dyed","Heat Treated"],"can_have_multiple_values":true,"fieldname":"GemstoneTreatment","key":"gemstone_treatment","recommended":false,"description":"Indicates any treatments or processing of the stone to change its color, clarity or durability."},"af11df6c0242d4276dc13b175379b723":{"type":"string","example":5,"can_have_multiple_values":false,"fieldname":"GemstoneLength","key":"gemstone_length","recommended":false,"description":"The length measurement of the gemstone in milimeters."},"8f70200f0fd2e1a7987947575021f910":{"type":"string","example":5,"can_have_multiple_values":false,"fieldname":"GemstoneHeight","key":"gemstone_height","recommended":false,"description":"The height measurement of the gemstone in milimeters."},"6ad2f369b3c9e5177d46ce54aaa855e3":{"type":"string","example":"Asscher","can_have_multiple_values":false,"fieldname":"GemstoneCut","key":"gemstone_cut","recommended":false,"description":"The style in which the gemstone(s) of your item have been cut and their general shape."},"be0f716b198ea39563b1ae49c03feaa7":{"type":"string","example":"Natural","can_have_multiple_values":false,"fieldname":"GemstoneCreationMethod","key":"gemstone_creation_method","recommended":false,"description":"The method by which the stone was created. Indicates if the stone is natural or manmade."},"087b63be2ec0b2c73fdeb21260a8429e":{"type":"string","example":"Colorless","can_have_multiple_values":false,"fieldname":"GemstoneColor","key":"gemstone_color","recommended":false,"description":"The color of the gemstone(s) in your item that accounts for hue, tone and saturation."},"40496e7589d7a3e945471afaa9b5eb77":{"type":"string","example":"FL","can_have_multiple_values":false,"fieldname":"GemstoneClarity","key":"gemstone_clarity","recommended":false,"description":"The quality and clarity of the visual aspect of the gemstone, particularly important for Diamonds. Indicates visual and and internal characteristics and surface defects of blemishes."},"3b714bc4f27197b27df4ed555063b227":{"type":"string","example":"Clip-On","can_have_multiple_values":false,"fieldname":"EarringBackFinding","key":"earring_back_finding","recommended":false,"description":"The type of fastening method for the backs of earrings."},"2a4450be3608cf3a38cad25f7d49b813":{"type":"string","example":"Lobster Clasp","can_have_multiple_values":false,"fieldname":"ClaspType","key":"clasp_type","recommended":false,"description":"The type of clasp or closure method of your item."},"b8b24c8698213706e91fb53948de8a69":{"type":"measurement","example":"12 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ChainLength","key":"chain_length","recommended":false,"description":"The length of the jewelry chain. Usually in inches."},"2ad129e62056d93bd1201aef398651bb":{"type":"string","example":1.29,"can_have_multiple_values":false,"fieldname":"TotalGemstoneWeight","key":"total_gemstone_weight","recommended":false,"description":"The total combined weight or mass (in carats) of all stones in the piece of jewelry."},"d9e0fd21a2211dee29551f555ae1036d":{"type":"string","example":["Bangle"],"can_have_multiple_values":true,"fieldname":"Style","key":"style","recommended":true,"description":"The style(s) associated with the item."},"cf48a2e1304c7e8e3df5e6a9eb67e991":{"type":"enum","example":"Electric","can_have_multiple_values":false,"enum_values":["Electric","Batteries"],"can_have_unknown_value":true,"fieldname":"PowerType","key":"power_type","recommended":false,"description":"Provides information on the exact type of power used by the item."},"abfc9636c9dd70941b01e4e077588073":{"type":"enum","example":["Calendar"],"can_have_multiple_values":true,"enum_values":["Calendar","Resizable","Water Resistant","Waterproof"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"0f94d987d41ce3cc234ca9051c468234":{"type":"measurement","example":"240 mm","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"WatchBandLength","key":"watch_band_length","recommended":false,"description":"The length of the watch band"},"8ea77ea069e2c0b4b74c167d9e394faf":{"type":"string","example":["Leather","Stainless Steel"],"can_have_multiple_values":true,"fieldname":"WatchBandMaterial","key":"watch_band_material","recommended":false,"description":"The primary material(s) from which the band of the watch is made."},"d3ac14e44af9ea925fd801578da42a63":{"type":"measurement","example":"22 mm","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"WatchBandWidth","key":"watch_band_width","recommended":false,"description":"The width of the watch band"},"028cde57179c9c4356a63649d170c6c4":{"type":"measurement","example":"42 mm","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"WatchCaseDiameter","key":"watch_case_diameter","recommended":false,"description":"The diameter of the watch case or dial"},"f4b65f0456fd44dd79accf30fa6002f6":{"type":"string","example":"Round","can_have_multiple_values":false,"fieldname":"WatchCaseShape","key":"watch_case_shape","recommended":false,"description":"The shape of the watch case or enclosure which contains the face & inner workings of the watch."},"37da4cf70f57a2eaf2671145d216b16e":{"type":"measurement","example":"12 mm","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"WatchCaseThickness","key":"watch_case_thickness","recommended":false,"description":"The thickness of the watch case or dial"},"eba94cf3d4446cdb773987c97f384918":{"type":"string","example":["Yoga","Sailing"],"can_have_multiple_values":true,"fieldname":"Activity","key":"activity","recommended":false,"description":"The particular sport or activity for which your item is intended."},"44084d5972f3b03d6abe5887c6dfd4b0":{"type":"string","example":["Ruby","Emerald"],"can_have_multiple_values":true,"fieldname":"Gemstone","key":"gemstone","recommended":false,"description":"The type of gemstone(s) in your item."},"9a6f633320e996ae1d5bad38d51e085c":{"type":"string","example":"Quartz","can_have_multiple_values":false,"fieldname":"WatchMovementType","key":"watch_movement_type","recommended":false,"description":"The type of movement within the watch"},"fe4c9e79e3986fe439f5ba1c21828f2e":{"type":"measurement","example":"1 TB","enum_values":["KB","MB","GB","TB"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"StorageCapacity","key":"storage_capacity","recommended":true,"description":"Describes the amount of storage space on the item's hard drive, typically measured in megabytes, gigabytes or terabytes."},"2390176fad8a47f031329e771da0e400":{"type":"string","example":"Android","can_have_multiple_values":false,"fieldname":"OperatingSystem","key":"operating_system","recommended":true,"description":"Describes the type of preloaded operating system software installed on the device."},"49b1cf42befb0ba138e430326fbc6ea6":{"type":"measurement","example":"42 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ScreenSize","key":"screen_size","recommended":true,"description":"Describes the measurement of the device's screen, typically measured diagonally in inches."},"567aba0d72ce14b0928d5e6aa61c7f35":{"type":"string","example":24,"can_have_multiple_values":false,"fieldname":"RearFacingCameraResolution","key":"rear_facing_camera_resolution","recommended":false,"description":"Describes the maximum resolution of the item's rear facing camera, in megapixels."},"a5dc22c3e935ab432331f4cab30c0787":{"type":"measurement","example":"3 GHz","enum_values":["Hz","KHz","MHz","GHz"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProcessorSpeed","key":"processor_speed","recommended":false,"description":"Describes the operational frequency of the computer's CPU"},"361b07f5140feaec4be03122ed0d6287":{"type":"string","example":"Intel Core i7","can_have_multiple_values":false,"fieldname":"ProcessorType","key":"processor_type","recommended":false,"description":"Describes commonly used name of the computer's CPU"},"fe18897b738f817319015eb3048928e5":{"type":"measurement","example":"16 GB","enum_values":["KB","MB","GB","TB"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"RamMemory","key":"ram_memory","recommended":false,"description":"Desribes the amount of RAM memory that is preinstalled on the product."},"083cb9b61b45283ca9ee93f906516300":{"type":"integer","example":1080,"can_have_multiple_values":false,"fieldname":"Resolution","key":"resolution","recommended":false,"description":"Describes the resolution of the product screen"},"a59afd07b13fe423f4ea99faec8453d8":{"type":"string","example":24,"can_have_multiple_values":false,"fieldname":"VideoResolution","key":"video_resolution","recommended":false,"description":"Describes the resolution of the video recordings of the product in\n megapixels"},"3b621ecd047fb5f084be32fc1afb6389":{"type":"string","example":"ATX","can_have_multiple_values":false,"fieldname":"MotherboardFormFactor","key":"motherboard_form_factor","recommended":false,"description":"Describes one of the standard physical sizes to which the computer motherboard conforms"},"bfe5d2ed096364fe145cc59a87f41760":{"type":"string","example":["CD ROM"],"can_have_multiple_values":true,"fieldname":"OpticalDrive","key":"optical_drive","recommended":false,"description":"Describes the type of optical drives included with the product"},"ec6456439bf772caeb9e8304cb32ec3e":{"type":"measurement","example":"16 GB","enum_values":["KB","MB","GB","TB"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MaximumSupportedRam","key":"maximum_supported_ram","recommended":false,"description":"Describes the maximum amount of RAM memory that can be supported by the product."},"70d088a2087eeddc317dedc4846e71e1":{"type":"enum","example":"Internal","can_have_multiple_values":false,"enum_values":["Internal","External"],"can_have_unknown_value":true,"fieldname":"HardDriveType","key":"hard_drive_type","recommended":false,"description":"Describes whether the hard drives of the product are internal or external"},"4a2d5d0019d9f4e3e553461d450eb409":{"type":"string","example":"Nvidia GeForce RTX 2080","can_have_multiple_values":false,"fieldname":"GraphicsCardModel","key":"graphics_card_model","recommended":false,"description":"Describes the model name of the graphics card included with the product"},"ea1ec0d2e16be590eee6a2ede6da6435":{"type":"string","example":24,"can_have_multiple_values":false,"fieldname":"FrontFacingCameraResolution","key":"front_facing_camera_resolution","recommended":false,"description":"Describes the maximum resolution of the item's front facing camera, in megapixels."},"b6049f7a7d322c6402d8e55ff0041d93":{"type":"string","example":"AM3","can_have_multiple_values":false,"fieldname":"CpuSocketType","key":"cpu_socket_type","recommended":false,"description":"The interface of, or required by, the central processing unit."},"54919ad5f3d7792c8e13c4bde36632bf":{"type":"string","example":"Full Tower","can_have_multiple_values":false,"fieldname":"ComputerCaseFormFactor","key":"computer_case_form_factor","recommended":false,"description":"Describes one of the standard physical sizes to which the computer case conforms"},"b31777d6275a27c26f1e9928c503ef19":{"type":"string","example":"Bluetooth 4.0","can_have_multiple_values":false,"fieldname":"BluetoothTechnology","key":"bluetooth_technology","recommended":false,"description":"Describes the type of version of the compatible bluetooth."},"dacac94d354a921cff590fa3d34d6078":{"type":"string","example":12,"can_have_multiple_values":false,"fieldname":"StandbyTime","key":"standby_time","recommended":false,"description":"Describes the total stand-by time in hours of the phone."},"ed57863b87213a9ffe54d40f978635b8":{"type":"string","example":12,"can_have_multiple_values":false,"fieldname":"TalkTime","key":"talk_time","recommended":false,"description":"Describes the total talk time in hours of the phone."},"643ec7fd851671f9f0fe60199b37bf0c":{"type":"string","example":["Leather"],"can_have_multiple_values":true,"fieldname":"WatchBandMaterial","key":"watch_band_material","recommended":false,"description":"The materials from which the band of the watch is made."},"d0aae07685ed17d8f4d00a2658fbb437":{"type":"string","example":["Standard SIM"],"can_have_multiple_values":true,"fieldname":"SimTypes","key":"sim_types","recommended":false,"description":"Describes the type of SIM compatible with the product, like Mini-SIM, Dual SIM."},"f2d22b905571ec1b0c9722ed6c227125":{"type":"integer","example":1,"can_have_multiple_values":false,"fieldname":"NumberofSIMCardSlots","key":"numberof_s_i_m_card_slots","recommended":false,"description":"Describes the number of SIM card slots on the product."},"7c8efd858532f7cdf437cc9fb39a0bec":{"type":"string","example":"3G","can_have_multiple_values":false,"fieldname":"CellularGeneration","key":"cellular_generation","recommended":false,"description":" Describes the communications network generation of the cell phone"},"65fe00497801a23a1285c1bdfba66014":{"type":"string","example":"CDMA","can_have_multiple_values":false,"fieldname":"CellularBand","key":"cellular_band","recommended":false,"description":"Describes the cellular band or network technology used by the device."},"fe1280e0d1b522e738d01296e5efb34f":{"type":"string","example":"Verizon","can_have_multiple_values":false,"fieldname":"CellPhoneServiceProvider","key":"cell_phone_service_provider","recommended":false,"description":"Describes the company that provides the phone's cellular service (if not unlocked)"},"bbc7f8045d5073625f856ac52313df47":{"type":"string","example":"Wristwatch","can_have_multiple_values":false,"fieldname":"WatchStyle","key":"watch_style","recommended":false,"description":"The style of watch."},"707d4ddb458001de9dd489dc081a917a":{"type":"string","example":["iPad"],"can_have_multiple_values":true,"fieldname":"CompatibleDevices","key":"compatible_devices","recommended":true,"description":"Devices compatible with the item."},"30c69d289f07754985fa521022655ba0":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductWeight","key":"product_weight","recommended":false,"description":"The weight of the fully assembled product."},"10a6af510a4d49ca6eeaebfbead6c6fa":{"type":"measurement","example":"40 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MinimumScreenSize","key":"minimum_screen_size","recommended":false,"description":" Describes the minimum size of the TV\/Monitor that the mount can\n accommodate"},"b1bac032a961eb0cff6df86fce2da4c4":{"type":"string","example":"Fixed Mount","can_have_multiple_values":false,"fieldname":"MountType","key":"mount_type","recommended":false,"description":"Describes how the TV or monitor is attached and degree of\n adjustment of position is allowed once the mount is installed"},"bdcaca96c46e181c0d4bf347097c228e":{"type":"measurement","example":"55 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MaximumScreenSize","key":"maximum_screen_size","recommended":false,"description":"Describes the maximum size of the TV\/Monitor that the mount can\n accommodate"},"ec7db52e6443df6d84672fa3397e4144":{"type":"measurement","example":"45 lb","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MaxLoadWeight","key":"max_load_weight","recommended":false,"description":"Describes the amount of weight that the TV\/Monitor mount\n can support as certified by the manufacturer"},"91f569f41bdde8d40c421f04d9f0ec23":{"type":"string","example":["In-Ear"],"can_have_multiple_values":true,"fieldname":"HeadphoneFeatures","key":"headphone_features","recommended":false,"description":"List features specific to headphones"},"158bcad2efdd1b1f944e632d8603c189":{"type":"measurement","example":"2 ft","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"CableLength","key":"cable_length","recommended":false,"description":"Total length of electronics cable"},"8904e34635ccfa9f1776f6bf8964d571":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductDepth","key":"product_depth","recommended":true,"description":"The depth of the fully assembled product."},"1e86882555078459f4919858583e9fce":{"type":"integer","example":1080,"can_have_multiple_values":false,"fieldname":"Resolution","key":"resolution","recommended":true,"description":"Describes the resolution of the product screen"},"75bf93f645a2702cd3dc1aeac96fcc79":{"type":"integer","example":50,"can_have_multiple_values":false,"fieldname":"MonochromePagesPerMinute","key":"monochrome_pages_per_minute","recommended":false,"description":"The number of monochrome pages that the imaging device is able to produce per minute."},"bf9c9a51c205f8c02070a7aa2e11d65b":{"type":"enum","example":"Monochrome","can_have_multiple_values":false,"enum_values":["Monochrome","Color"],"can_have_unknown_value":true,"fieldname":"MonochromeOrColor","key":"monochrome_or_color","recommended":false,"description":"Is the imaging device capable of color processing or monochrome only?"},"eefa8dd52fadfc95322a8c584a87e1c5":{"type":"integer","example":12,"can_have_multiple_values":false,"fieldname":"ColorPagesPerMinute","key":"color_pages_per_minute","recommended":false,"description":"The number of color pages that the imaging device is able to produce per minute."},"be84c1ccb42a2826aa12efb3ad494d6e":{"type":"string","example":"LCD","can_have_multiple_values":false,"fieldname":"DisplayTechnology","key":"display_technology","recommended":true,"description":"Describes the type of technology that powers the display, like LED or LCD."},"fece1f8c30e55cec967050c8d46d2179":{"type":"string","example":5,"can_have_multiple_values":false,"fieldname":"ResponseTime","key":"response_time","recommended":false,"description":"Describes the amount of time it takes for the pixels in a display to change, measured in miliseconds."},"d2b0fda41f2dc69846c9a72ee97b6304":{"type":"string","example":60,"can_have_multiple_values":false,"fieldname":"RefreshRate","key":"refresh_rate","recommended":false,"description":"Describes the refresh rate of the display. This measures the number of times the picture is updated per second, measured in Hz."},"0307a27632bdff957e247336e336c958":{"type":"string","example":"200 x 200","can_have_multiple_values":false,"fieldname":"VesaMountingStandard","key":"vesa_mounting_standard","recommended":false,"description":"The VESA Standard defines the distance in millimeters between the\n four mounting holes on the back of a TV (distance horizontally x\n distance vertically)."},"0ea98808c27886d1dae8ceaa3aaa2260":{"type":"string","example":"4:3","can_have_multiple_values":false,"fieldname":"AspectRatio","key":"aspect_ratio","recommended":false,"description":"Describes the relationship between the product's width and its height."},"0abb978f2c8edd1d059e564a4e41e744":{"type":"integer","example":3,"can_have_multiple_values":false,"fieldname":"NumberOfHdmiports","key":"number_of_hdmiports","recommended":false,"description":"The number of HDMI ports on the television or monitor"},"82229416d35b701d3f141174aa5f054b":{"type":"string","example":"20,000:1","can_have_multiple_values":false,"fieldname":"MaximumContrastRatio","key":"maximum_contrast_ratio","recommended":false,"description":"The ratio between the luminance of the brightest color to that of\n the darkest color capable of being displayed."},"2da53aa14b92ca922b59fdea5a6a69d6":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsAssemblyRequired","key":"is_assembly_required","recommended":false,"description":"Indicates if the product arrives unassembledand must be put together before use."},"6fa83aef4f8623080b9b36b3373d650f":{"type":"string","example":"CCFL","can_have_multiple_values":false,"fieldname":"BacklightTechnology","key":"backlight_technology","recommended":false,"description":"Describes the technology used to backlight the screen or television. Commonly Cathold Fluorescent Tubes (CCFL) or Light Emitting Diodes (LED)"},"459473687330b5617bdaf470bcf83a7e":{"type":"string","example":5,"can_have_multiple_values":false,"fieldname":"AudioPowerOutput","key":"audio_power_output","recommended":false,"description":"Describes the power of the audio output of the device's speakers, measured in watts."},"81c8727757c4fd1d1d12f5d261744c57":{"type":"string","example":["Noise Cancelling"],"can_have_multiple_values":true,"fieldname":"AudioFeatures","key":"audio_features","recommended":false,"description":"Describes whether the product has certain special audio features."},"1e2de3306f34ebe0755bb8f5297f9cb0":{"type":"string","example":1.8,"can_have_multiple_values":false,"fieldname":"ThrowRatio","key":"throw_ratio","recommended":false,"description":"The relation between the throw distance and the image width; tells\n us what image size we can project from a certain distance away."},"755632f8c8070139f1d7b1d8817eeac3":{"type":"string","example":6500,"can_have_multiple_values":false,"fieldname":"LampLife","key":"lamp_life","recommended":false,"description":"The expected life of the projection lamp in hours."},"697539305c05f8a9a0fe6e97e2eab4d0":{"type":"string","example":2000,"can_have_multiple_values":false,"fieldname":"Brightness","key":"brightness","recommended":false,"description":"Brightness per bulb measured in lumens."},"fba4b5b5f790c6348fabe6c10d0f8bf6":{"type":"string","example":"Xbox 360","can_have_multiple_values":false,"fieldname":"VideoGamePlatform","key":"video_game_platform","recommended":true,"description":"Describes the type of platform on which video game software is capable of running."},"01691d8e5b9ed5a58a109dc90b74f439":{"type":"string","example":"Fallout","can_have_multiple_values":false,"fieldname":"VideoGameSeries","key":"video_game_series","recommended":false,"description":"The name of the video game series this game belongs to."},"ecb8b647ae87edddac43b94a3093e72c":{"type":"string","example":"E - Everyone","can_have_multiple_values":false,"fieldname":"VideoGameRating","key":"video_game_rating","recommended":false,"description":"Describes the standard rating of the content of the video game. Can be important for violent games or games intended only for mature audiences."},"532c713f0d2a4408702814f32c02020f":{"type":"string","example":"Shooter","can_have_multiple_values":false,"fieldname":"VideoGameGenre","key":"video_game_genre","recommended":false,"description":"Describes the genre, style or type of video game being sold."},"e65585ff17b284d24ee18e28851f6ac8":{"type":"measurement","example":"1 TB","enum_values":["KB","MB","GB","TB"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"StorageCapacity","key":"storage_capacity","recommended":false,"description":"Describes the amount of storage space on the item's hard drive, typically measured in megabytes, gigabytes or terabytes."},"9a9c97dfb6df9491e73d4ba7d39e2460":{"type":"string","example":["Kinect"],"can_have_multiple_values":true,"fieldname":"RequiredPeripherals","key":"required_peripherals","recommended":false,"description":"Indicates any type of required accessory or peripheral necessary to operate the item (or play the video game)."},"a36f46f58ba3a8907408d6c24e50bfad":{"type":"string","example":"09-19-2019","can_have_multiple_values":false,"fieldname":"ReleaseDate","key":"release_date","recommended":false,"description":"Describes the specific date which marks when the product was made available for public distribution, provided in the format MM-DD-YYYY"},"48504b28464be452dc971f271b0eef35":{"type":"string","example":"CD","can_have_multiple_values":false,"fieldname":"PhysicalMediaFormat","key":"physical_media_format","recommended":false,"description":"Describes the standard media format in which the product exists."},"95f1c14e6ac4218a6af57710a935fb6f":{"type":"string","example":"Android","can_have_multiple_values":false,"fieldname":"OperatingSystem","key":"operating_system","recommended":false,"description":"Describes the type of preloaded operating system software installed on the device."},"87ee129e6abae679ef3dc1881c29ac4c":{"type":"string","example":"Natural\/Unfinished","can_have_multiple_values":false,"fieldname":"Finish","key":"finish","recommended":true,"description":"The external treatment to the productthat usually includes a change inappearance or texture to the item.Commonly used for furniture includewood, metal and fabric."},"73c8639362fab24e43a3fa21a122d3f6":{"type":"string","example":"Bohemian","can_have_multiple_values":false,"fieldname":"DecorStyle","key":"decor_style","recommended":true,"description":"The decorative style in which the product was made."},"9c05349004f01b710d863a5bcc135754":{"type":"string","example":["Designer"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"447e1ca997ac7372d84321a5da8b9577":{"type":"string","example":["Family Room"],"can_have_multiple_values":true,"fieldname":"RecommendedRooms","key":"recommended_rooms","recommended":false,"description":"The rooms where the item is likely or recommended to be used."},"cb8a3c1875a379537c185708e6662ba6":{"type":"measurement","example":"20 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"SeatBackHeight","key":"seat_back_height","recommended":false,"description":"Indicates the seat back height from the base of the seat to the top of the back. This may be separate from the \"Assembled Product Height\" and \"Seat Height\" attributes."},"ed80e4f1f84fcb9b076e9089aa9b73da":{"type":"measurement","example":"36 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"SeatHeight","key":"seat_height","recommended":false,"description":"Indicates height from the floor to the top of the seat. This may be separate from the \"Assembled Product Height\" and \"Seat Back Height\" attributes."},"eaf4eb99a4c71f786c74f207839181ab":{"type":"string","example":"Leather","can_have_multiple_values":false,"fieldname":"SeatMaterial","key":"seat_material","recommended":false,"description":"The material of the item's seat cushion. This may be separate from the item's main material composition, which falls under the \"Material\" attribute."},"f2d839922ab1a15c3720eb42f01393ff":{"type":"string","example":"Square","can_have_multiple_values":false,"fieldname":"Shape","key":"shape","recommended":false,"description":"The general shape of the product. Often used to describe\n furniture and home furnishings."},"00d4ef3a1bb967e59e960f07a8a36010":{"type":"enum","example":["Antique"],"can_have_multiple_values":true,"enum_values":["Foldable","Inflatable","Pump Included","Wheeled","Antique"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"2733dc5d8c97d75657a86568037a0609":{"type":"integer","example":4,"can_have_multiple_values":false,"fieldname":"NumberOfDrawers","key":"number_of_drawers","recommended":false,"description":"The number of drawers included in the product."},"9e1903c5cd2876e1c9889eb5cea8045a":{"type":"integer","example":4,"can_have_multiple_values":false,"fieldname":"NumberOfShelves","key":"number_of_shelves","recommended":false,"description":"The number of shelves included in the product."},"8cafc76619e3f64c83abec41a95b9915":{"type":"string","example":"Wall Mount","can_have_multiple_values":false,"fieldname":"MountType","key":"mount_type","recommended":false,"description":"The method by which the item is attached or anchored. Used for products such as shelving and other fixtures."},"97bdb9242e7b2962284619b2ce7c06a4":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MattressThickness","key":"mattress_thickness","recommended":false,"description":"The measure from the bottom of the mattress to the crown"},"a700f8e116174455d5d9f3782aa0bf4e":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsPowered","key":"is_powered","recommended":false,"description":"Indicates if the item uses electricity and requires a power cord or batteries to operate."},"7f54c0815b0e8d9cb192bdc4819bd7f5":{"type":"enum","example":"Indoor Only","can_have_multiple_values":false,"enum_values":["Indoor Only","Outdoor Only","Indoor\/Outdoor"],"can_have_unknown_value":true,"fieldname":"IndoororOutdoor","key":"indooror_outdoor","recommended":false,"description":"Indicates if the item is indoor only, outdoor only, or intended for both."},"39a086121f568673a43aedb5478c26d4":{"type":"string","example":"Foam","can_have_multiple_values":false,"fieldname":"FillMaterial","key":"fill_material","recommended":false,"description":"The material used to stuff the item usually in cushions, pillows,\n mattresses, and bean bags."},"d17ad1a388d5c83e6d89a16d3ac964fb":{"type":"string","example":"Extra Firm","can_have_multiple_values":false,"fieldname":"ComfortLevel","key":"comfort_level","recommended":false,"description":"The firmness or softness of a mattress."},"9d73d1c85fae03275869c6806d30fd93":{"type":"string","example":"Canopy Bed","can_have_multiple_values":false,"fieldname":"BedFrameType","key":"bed_frame_type","recommended":false,"description":"The type or style of the bed. Does not include Futons, Day Beds, or Sleepers."},"7d8fefe9bf9918c271f908a0e83f5f16":{"type":"enum","example":["Wheeled"],"can_have_multiple_values":true,"enum_values":["Foldable","Wheeled","Antique"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"e009f02a406e7aab29c5ab8230d08848":{"type":"string","example":"Natural\/Unfinished","can_have_multiple_values":false,"fieldname":"Finish","key":"finish","recommended":false,"description":"The external treatment to the productthat usually includes a change inappearance or texture to the item.Commonly used for furniture includewood, metal and fabric."},"13828083302ba311fdebc396a1610bf6":{"type":"string","example":["Fever"],"can_have_multiple_values":true,"fieldname":"HealthConcern","key":"health_concern","recommended":true,"description":"Indicates if the item is meant to alleviate particular health issues, illnesses or life stages. For concerns specific to skin care, please use the Skin Care Concern attribute."},"11f3261c7ccebb79e06751f778d5d4ab":{"type":"measurement","example":"12 oz","enum_values":["ml","l","oz","cu_ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Capacity","key":"capacity","recommended":true,"description":"Indicates the capacity or volume of your item. This is important for buyers to know the amount of product they are receiving and is important for skin care, beauty & hair care products."},"2d80b0c58142a82357f2d2fdfafd9068":{"type":"string","example":["Beeswax"],"can_have_multiple_values":true,"fieldname":"Ingredients","key":"ingredients","recommended":true,"description":"The list of all ingredients contained in an item, as found on the product label mandated by FDA guidelines."},"365ecf662d48185b92a5aa253d935173":{"type":"string","example":"3 to 5 hours","can_have_multiple_values":false,"fieldname":"ResultTime","key":"result_time","recommended":false,"description":"Duration of time necessary to see the outcome from using a product. Typically used for medical and personal care test kits and monitors."},"7699774215529bc8717eb00ce738c58a":{"type":"string","example":"Heavy","can_have_multiple_values":false,"fieldname":"Absorbency","key":"absorbency","recommended":false,"description":"Term describing the ability of a product to absorb moisture. Used in personal care products such as pads and liners."},"2639fc784370fb97d9a426b33e6eff0e":{"type":"measurement","example":"0.4 ml","enum_values":["ml","l","oz","cu_ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ServingSize","key":"serving_size","recommended":false,"description":"Measurement value specifying the amount of the item typically used as a reference on the label of that item to list per serving information (nutrients, calories, total fat). Applicable for a wide variety of products including food, beverages, and nutritional supplements."},"336df2b3fca4bc8318f7589b8c888d03":{"type":"string","example":["Dry Skin"],"can_have_multiple_values":true,"fieldname":"SkinCareConcern","key":"skin_care_concern","recommended":false,"description":"Indicates if the item is meant to alleviate particular skin care issues. For general health concerns like obesity, or blood pressure please use the Health Concerns attribute. Values may be similar to the Skin Type attribute - \"dry cracked skin\" may be a cocnern but \"dry\" is a skin type."},"eba9b3d21340c3ed25d6778417988888":{"type":"enum","example":"Oily","can_have_multiple_values":false,"enum_values":["Oily","Dry","Combination","Sensitive"],"can_have_unknown_value":true,"fieldname":"SkinType","key":"skin_type","recommended":false,"description":"Indicates the general skin type that the product is intended for on the oily\/dry spectrum."},"cffbfe91501fcda43b326b2797a39ee0":{"type":"integer","example":15,"can_have_multiple_values":false,"fieldname":"SpfValue","key":"spf_value","recommended":false,"description":"Indicates the strength of SPF (Sun Protection Factor) in an item. This describes how well the product can block out harmful rays from the run. Commonly found in suncreen and makeup products."},"4f2642a8dcd42338499b2aa75ffca1fe":{"type":"enum","example":["Reusable"],"can_have_multiple_values":true,"enum_values":["Adaptive Lenses","Automatic Shut Off","Cordless","Foldable","Industrial","Latex-Free","Non-Comedogenic","Portable","Polarized","Reusable","Self-Tanning","Tinted","Travel Size","Waterproof","Wheeled","Scratch-Resistant"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"78aba0a00b3412827370aede724962dc":{"type":"string","example":["Plastic"],"can_have_multiple_values":true,"fieldname":"LensMaterial","key":"lens_material","recommended":false,"description":"The substances an optical lens is made out of."},"e6041e1b82f9e3ac106d984107d13504":{"type":"string","example":"Single Vision","can_have_multiple_values":false,"fieldname":"LensType","key":"lens_type","recommended":false,"description":"Whether the lens is single, multifocal, or tinted"},"937f3f40d16b2b5a23052e2d7311c6ff":{"type":"string","example":"Blue","can_have_multiple_values":false,"fieldname":"LensTint","key":"lens_tint","recommended":false,"description":"Color of lens tint."},"8b4897149a7b0cf1c4b79f6ca7c03881":{"type":"string","example":["Solid"],"can_have_multiple_values":true,"fieldname":"Keywords","key":"keywords","recommended":false,"description":"Keywords that might be used to search for this term, including synonyms and related terms."},"830b557ebbb8f05aa8d8e89c8073c9d8":{"type":"string","example":[{"name":"Pyrithione zinc","amount":2.5},{"name":"Salicylic Acid","amount":2}],"can_have_multiple_values":false,"fieldname":"IngredientsComposition","key":"ingredients_composition","recommended":false,"description":"The ingredients with the corresponding composition value"},"45f47b75dfc8dcab7bcc1b6895c572a0":{"type":"string","example":["Iron Oxide"],"can_have_multiple_values":true,"fieldname":"InactiveIngredients","key":"inactive_ingredients","recommended":false,"description":"Describes the list of inactive ingredients as shown on the item label."},"a416c6be2906ac2830fbd812fba3e591":{"type":"enum","example":"Full-Rim","can_have_multiple_values":false,"enum_values":["Full-Rim","Rimless","Semi-Rimless","Half-Rim"],"can_have_unknown_value":true,"fieldname":"EyewearRim","key":"eyewear_rim","recommended":false,"description":"Whether eyewear has rims, partial rims, or no rim at all."},"f4b8e7636597b2b532f6c75c8bd2a7a9":{"type":"string","example":["1 teaspoon every 6 hours"],"can_have_multiple_values":true,"fieldname":"Dosage","key":"dosage","recommended":false,"description":"The amount of a medication, drug, or supplement that is directed to be taken, or applied at one time or regularly during a period of time, as specified by the manufacturer."},"91455c53f237eb64c3de88f2c35b9556":{"type":"string","example":["Eyes","Face"],"can_have_multiple_values":true,"fieldname":"BodyPart","key":"body_part","recommended":false,"description":"Describes the particular body part(s) for which the item is intended."},"007e22a1352c2d2a1a443ba90e14b127":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"BatteriesRequired","key":"batteries_required","recommended":false,"description":"Indicates if batteries are required to use the product."},"052d7ff877183c9dcce5362a73e73428":{"type":"integer","example":400,"can_have_multiple_values":false,"fieldname":"UVRating","key":"u_v_rating","recommended":false,"description":"Ultraviolet rating for eyewear."},"3308f187f85aeefe4d6ed8fc5cd8e8e6":{"type":"enum","example":"Fair","can_have_multiple_values":false,"enum_values":["Fair","Light","Medium","Neutral","Olive","Dark"],"can_have_unknown_value":true,"fieldname":"SkinTone","key":"skin_tone","recommended":false,"description":"Describes the color or shade of skin that a product is targeted for. This is separate from Color Name of the product. \"Olive\" may be a color name from the manufacturer as well as the type of skin tone the product is targeting."},"9a04dccec14d02d689cf02fb757d1a10":{"type":"string","example":["Beeswax"],"can_have_multiple_values":true,"fieldname":"InactiveIngredients","key":"inactive_ingredients","recommended":false,"description":"Describes the list of inactive ingredients as shown on the item label."},"896fe12fa920abf8d338cef50e162628":{"type":"string","example":["Fever"],"can_have_multiple_values":true,"fieldname":"HealthConcern","key":"health_concern","recommended":false,"description":"Indicates if the item is meant to alleviate particular health issues, illnesses or life stages. For concerns specific to skin care, please use the Skin Care Concern attribute."},"3456eaf701f7278c2be139c78bcabd3f":{"type":"enum","example":["Coarse"],"can_have_multiple_values":true,"enum_values":["Coarse","Color Treated","Curly","Damaged","Dry","Fine","Oily"],"can_have_unknown_value":false,"fieldname":"HairType","key":"hair_type","recommended":false,"description":"Indicates the general hair types that the product is intended for relating to texture, coarseness, oiliness, thickness, and curliness."},"ce6ffae63aa69791f8881e7fb7c2bea8":{"type":"string","example":["Wash with warm water & soap"],"can_have_multiple_values":true,"fieldname":"CareInstructions","key":"care_instructions","recommended":false,"description":"Describes how the item should be cleaned, cared for or maintained."},"f7cdf1aaddb5d5cf96bdc35a3f9ba7c7":{"type":"string","example":"100% Hand-Tied","can_have_multiple_values":false,"fieldname":"WigCapType","key":"wig_cap_type","recommended":false,"description":"The construction style of the wig cap (also called the \"wig base\"), affecting the wig's appearance, durability, and styling options."},"16f4737bd60328d18f404968ba09f5de":{"type":"enum","example":["Automatic Shut Off"],"can_have_multiple_values":true,"enum_values":["Automatic Shut Off","Energy Star-Certified"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"ecb45e77061f56ea0bf5ab6280fd7b6d":{"type":"integer","example":1,"can_have_multiple_values":false,"fieldname":"NumberofLights","key":"numberof_lights","recommended":false,"description":"The number of lights or bulbs contained within a light or light fixture."},"884e05ecb296a36e8e63b1b2bd060fb9":{"type":"string","example":"Fluorescent","can_have_multiple_values":false,"fieldname":"LightBulbType","key":"light_bulb_type","recommended":false,"description":"The type of light bulb."},"0e8054ce0f52ba0d4105f9da4cbfcbfe":{"type":"measurement","example":"12 oz","enum_values":["ml","l","oz","cu_ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Capacity","key":"capacity","recommended":false,"description":"Indicates the maximum amount that the item can hold like pounds, liters or volume. Does not include Storage Capacity which is used for digital items."},"64b3fe664fa4c3666faae8b77a734631":{"type":"measurement","example":"12 oz","enum_values":["ml","l","oz","cu_ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Capacity","key":"capacity","recommended":true,"description":"Indicates the maximum amount that the item can hold like pounds, liters or volume. Does not include Storage Capacity which is used for digital items."},"7c421b8f435ae90ca36f71389bd6b9ca":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductWeight","key":"product_weight","recommended":true,"description":"The weight of the fully assembled product."},"3eb15df7a5722992f9aa3dbf1a8c3923":{"type":"string","example":["Low Noise"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"049be88f7223ae9a349f4d47ec511389":{"type":"measurement","example":"220 V","enum_values":["V","KV"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Volts","key":"volts","recommended":false,"description":"The number of volts the product produces or requires. Also known as Voltage;"},"3aa26481e6a2737040dacf5844ff32f2":{"type":"enum","example":["Automatic Shut Off"],"can_have_multiple_values":true,"enum_values":["Automatic Shut Off","Energy Star-Certified","Bluetooth Compatible","Industrial","Remote Control Included","Wi-Fi Compatible"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"1b4aabae8670a6b5f8ad83a12c664b37":{"type":"string","example":44,"can_have_multiple_values":false,"fieldname":"SoundRating","key":"sound_rating","recommended":false,"description":"The sound decibel rating for the noise level of the appliance."},"43e44c783f17bdfc8772466174badee1":{"type":"string","example":["Amazon Alexa"],"can_have_multiple_values":true,"fieldname":"SmartHomeCompatibility","key":"smart_home_compatibility","recommended":false,"description":"The type of Smart Home devices that the product is compatible with."},"140a15b94c6d50aa103b176dc71951ff":{"type":"integer","example":2,"can_have_multiple_values":false,"fieldname":"NumberofDoors","key":"numberof_doors","recommended":false,"description":"The number of doors on the item."},"454fe2a0cbc9e12c03b9db3ccfe98a21":{"type":"integer","example":4,"can_have_multiple_values":false,"fieldname":"NumberofBurners","key":"numberof_burners","recommended":false,"description":"The number of cooking burners or elements."},"b771092e645e5a68eb3c34f590d4a028":{"type":"string","example":"Top Load","can_have_multiple_values":false,"fieldname":"LoadPosition","key":"load_position","recommended":false,"description":"The type of load position for washers & dryers."},"da1ff3922c1b46224c541ecf62c91f69":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsSet","key":"is_set","recommended":false,"description":"Indicates if the product is being sold as a set, like washer & dryer set."},"424a3c305eb21ffbd1257294397cc022":{"type":"string","example":"Electric","can_have_multiple_values":false,"fieldname":"FuelType","key":"fuel_type","recommended":false,"description":"The type of fuel used to power certain appliances."},"96481ec4bdef8e6fe8e5093ef39a68d0":{"type":"integer","example":10200,"can_have_multiple_values":false,"fieldname":"BTU","key":"b_t_u","recommended":false,"description":"The number of British Thermal Units for heating and cooling appliances."},"608d8c80b0c29120dd74b33b92b656f3":{"type":"measurement","example":"400 W","enum_values":["W","KW","MW","GW"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Watts","key":"watts","recommended":false,"description":"The number of watts the product procues or requires. Also known as Wattage."},"8f4a7d7221541f65cac8a79c08758bfb":{"type":"string","example":"Oil","can_have_multiple_values":false,"fieldname":"ProductForm","key":"product_form","recommended":true,"description":"The consistency, texture or formulation of the item and the way\n it will be consumed or dispensed."},"803d2a584a08f5944b306958fdb95a21":{"type":"string","example":["Vanilla"],"can_have_multiple_values":true,"fieldname":"Scent","key":"scent","recommended":true,"description":"The scent or fragrance of your item; including items\n labelled as \"unscented\""},"4e7d7d90f4137c48ce55a4b9a823eff2":{"type":"string","example":["some_string","other"],"can_have_multiple_values":true,"fieldname":"Ingredients","key":"ingredients","recommended":true,"description":"The list of all ingredients contained in an item, as found on the product label mandated by FDA guidelines."},"c8d76e2396b1577c1c9da0d9ec4cf770":{"type":"string","example":["Carpet"],"can_have_multiple_values":true,"fieldname":"RecommendedUse","key":"recommended_use","recommended":true,"description":"The recommended use\/surface of cleaning product."},"ec65783a5d3d73c90f83a5d59797ac73":{"type":"string","example":["Unscented"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"febfed4ca6efd5a645a1862390468384":{"type":"string","example":"Canister","can_have_multiple_values":false,"fieldname":"VacuumType","key":"vacuum_type","recommended":false,"description":"The type of vacuum cleaner."},"da6b491d82e229483b578dec94e4ff95":{"type":"enum","example":["Biodegradable"],"can_have_multiple_values":true,"enum_values":["Biodegradable","Recyclable"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"6cc94d5bc1810a51cf9b3139b629fd37":{"type":"integer","example":15,"can_have_multiple_values":false,"fieldname":"ShelfLife","key":"shelf_life","recommended":false,"description":"The length of time that the product can be stored without spoiling or losing quality, measured in days."},"23a063f0e0a0a294b129169b749639fa":{"type":"measurement","example":"12 oz","enum_values":["ml","l","oz","cu_ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Capacity","key":"capacity","recommended":false,"description":"Indicates the maximum amount that the item can hold like pounds, liters or volume."},"b9bee7f2bace5f8065911d6998b34bad":{"type":"string","example":"Bag","can_have_multiple_values":false,"fieldname":"BagType","key":"bag_type","recommended":false,"description":"Indicates whether the vacuum cleaner is bag or bagless."},"07360c7815892f05de28ec9f92926612":{"type":"enum","example":["Chemical"],"can_have_multiple_values":true,"enum_values":["Chemical","Combustible","Flammable"],"can_have_unknown_value":false,"fieldname":"Warnings","key":"warnings","recommended":false,"description":"Warnings associated with the product."},"e6c000a4a5c024e4385c9e89ef1232c3":{"type":"integer","example":400,"can_have_multiple_values":false,"fieldname":"ThreadCount","key":"thread_count","recommended":true,"description":"The number of threads per square inch of fabric."},"2410d57d61f0e552896d9aca00f7b67b":{"type":"enum","example":["Water Resistant"],"can_have_multiple_values":true,"enum_values":["Reversible","Hypoallergenic","Stain Resistant","Water Resistant","Organic","Sustainably Sourced"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"c1a740062d17b6704080705c2474435c":{"type":"integer","example":3,"can_have_multiple_values":false,"fieldname":"PiecesInSet","key":"pieces_in_set","recommended":false,"description":"The number of items included in the set. If the item contains matching fitted sheets, flat sheets, and 2 pillowcases - the number is 4."},"0f4c1a53965b293c894d4b0e607b9770":{"type":"string","example":["Designer","Anti-Streak"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"4a6f34f51dbacff4a7033c14e600ce06":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsSet","key":"is_set","recommended":false,"description":"Indicates if the product contains 2 of more different items that are sold as part of a set."},"e8e50abdc6b50b497e7c90af199feeec":{"type":"integer","example":1,"can_have_multiple_values":false,"fieldname":"NumberOfLicenses","key":"number_of_licenses","recommended":true,"description":"The maximum number of users or installations allowed under the terms of the software licensing agreement."},"9c3c05234da77307c8b4fc50977ca324":{"type":"string","example":["Windows 7 or later"],"can_have_multiple_values":true,"fieldname":"SoftwareSystemRequirements","key":"software_system_requirements","recommended":true,"description":"The basic requirements necessary of any system in order to satisfactorily run the software."},"46c833eff8474794a70b21f9d2389e04":{"type":"string","example":"Antivirus & Security","can_have_multiple_values":false,"fieldname":"SoftwareCategory","key":"software_category","recommended":false,"description":"The general category of software to which the item is most closely associated with"},"1c4ef2904cadfca2cf53773ad85ce53d":{"type":"string","example":"7.2","can_have_multiple_values":false,"fieldname":"SoftwareVersion","key":"software_version","recommended":false,"description":"The version number assigned to this specific release of the software."}} \ No newline at end of file +{"5773e3cf8b57a590831b2fa4966071b7":{"key":"gender","fieldname":"Gender","recommended":false,"type":"enum","description":"Gender the product item is targeted towards","enum_values":["female","male","unisex"],"can_have_unknown_value":false},"48f499603e045536424c8db9e2b51338":{"key":"brand","fieldname":"Brand","recommended":false,"type":"string","description":"Brand name, unique manufacturer part number (MPN), or Global Trade Item Number (GTIN) of the item."},"e44fa2f9d73d8394fc19e11bda594270":{"key":"color","fieldname":"Color","recommended":false,"type":"string","description":"Color of the product item"},"3c93dcbe5e2427633884455f8fdf3d0a":{"key":"size","fieldname":"size","recommended":false,"type":"string","description":"Size of the product item"},"14360682ab38bda0c27cd410da1ddb93":{"key":"pattern","fieldname":"Pattern","recommended":false,"type":"string","description":"Pattern of the product item"},"57a5027e44183e4bee60fd79e0f72215":{"key":"material","fieldname":"Material","recommended":false,"type":"string","description":"Material of the product item"},"536559919dfbf7c806f82836c7b6ace0":{"key":"age_group","fieldname":"AgeGroup","recommended":false,"type":"enum","description":"Age group the product item is targeted towards","enum_values":["adult","all ages","infant","kids","newborn","teen","toddler"],"can_have_unknown_value":false},"fdbb66325f7179c53e0d013f85a8f1bb":{"key":"material","fieldname":"Material","recommended":true,"type":"string","description":"Material of the product item"},"56beea7a921d2d0a4b65bcb91de4619f":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MinimumWeight","key":"minimum_weight","recommended":true,"description":"The lower weight limit or capability of an item,often used in conjunction with \"Maximum Weight\".The meaning varies with context of product.For example, when used with \"Maximum Weight\",this attribute provides weight ranges for a range of productsincluding pet medicine, baby carriers and outdoor play structures."},"b4e2ba079a90aafe22d7b40a27a8a86b":{"type":"string","example":"1-3 Years","can_have_multiple_values":false,"fieldname":"AgeRange","key":"age_range","recommended":true,"description":"Minimum and Maximum Ages for a product. Note: the unit of measure in\n Months, or Years."},"d86e410dc0b595fa52c8071297df164e":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductWidth","key":"product_width","recommended":true,"description":"The width of the fully assembled product."},"fb29eb2f1bed6b57202be5766b13a012":{"key":"color","fieldname":"Color","recommended":true,"type":"string","description":"Color of the product item"},"6f6763dc75294a1700c3325ed0e01501":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductLength","key":"product_length","recommended":true,"description":"The length of the fully assembled product."},"a125082f8b596fd6a3fc4ef69aac4ce9":{"key":"gender","fieldname":"Gender","recommended":true,"type":"enum","description":"Gender the product item is targeted towards","enum_values":["female","male","unisex"],"can_have_unknown_value":false},"b77f4835261839838cf7da93a4397624":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductHeight","key":"product_height","recommended":true,"description":"The height of the fully assembled product"},"fab78b5f78ea9c6822f0efd4b76812c7":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MaximumWeight","key":"maximum_weight","recommended":true,"description":"The upper weight limit or capability of an item,often used in conjunction with \"Minimum Weight\".The meaning varies with context of product.For example, when used with \"Minimum Weight\",this attribute provides weight ranges for a range of productsincluding pet medicine, baby carriers and outdoor play structures."},"c33d8f504a0d16cc768948032b96bb86":{"type":"string","example":["Waterproof"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"75d33e09027a3e497cd7f4871c44d0ad":{"type":"string","example":"Shape Identification","can_have_multiple_values":false,"fieldname":"EducationalFocus","key":"educational_focus","recommended":false,"description":"Describes the educational skills that the product is intended to improve"},"a61b31aad2b1cff7a5e059435aa0c079":{"type":"string","example":"Chewbacca","can_have_multiple_values":false,"fieldname":"Character","key":"character","recommended":false,"description":"The particular character, person or entity that your item represents or is associated with."},"186773615b385aea09f78bf7846c2da2":{"type":"string","example":"Space","can_have_multiple_values":false,"fieldname":"Theme","key":"theme","recommended":false,"description":"The particular subject, theme or idea that your item represents or is associated with."},"f0cc9df58632d42a9f64e187e36822ac":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsAssemblyRequired","key":"is_assembly_required","recommended":true,"description":"Indicates if the product arrives unassembledand must be put together before use."},"18213b9375e78464379a596bc5a12105":{"type":"string","example":"jogging","can_have_multiple_values":false,"fieldname":"StrollerType","key":"stroller_type","recommended":false,"description":"Prominent stroller styles."},"e294d165c14bf93d4ff9d565c45b86f0":{"type":"enum","example":["Foldable"],"can_have_multiple_values":true,"enum_values":["Foldable"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"09e6b8670b86e122237dee1d1948f5e3":{"type":"string","example":"3-point harness","can_have_multiple_values":false,"fieldname":"SafetyHarnessStyle","key":"safety_harness_style","recommended":false,"description":"The style of the occupant restraint harness included with the car\n seat, stroller, carrier, etc."},"5a781cf5acf5b20a3457889ab0719688":{"type":"integer","example":1,"can_have_multiple_values":false,"fieldname":"NumberOfSeats","key":"number_of_seats","recommended":false,"description":"The number of people that can be accommodated by the\n available seats of an item."},"acb1aef05b9c5b358e8d767422053a0c":{"type":"string","example":"Convertible Car Seats","can_have_multiple_values":false,"fieldname":"ChildCarSeatStyle","key":"child_car_seat_style","recommended":false,"description":"Prominent car seat styles."},"84520363ef89687443e2b75aac0ca2a4":{"type":"string","example":"3 ft","can_have_multiple_values":false,"fieldname":"CarSeatMaxChildHeight","key":"car_seat_max_child_height","recommended":false,"description":"The maximum height of the child occupant as given by the\n manufacturer, measured in inches or centimeters."},"9d014a512c1e3019550901b0c0494ff4":{"type":"string","example":"Forward-Facing","can_have_multiple_values":false,"fieldname":"CarSeatFacingDirection","key":"car_seat_facing_direction","recommended":false,"description":"Which direction the car seat faces."},"c139a1077e40bc1ed55105d8250cfbd7":{"type":"string","example":"sling","can_have_multiple_values":false,"fieldname":"BabyCarrierStyle","key":"baby_carrier_style","recommended":false,"description":"Prominent wearable baby carrier styles."},"de2ea24937f3cfb9d23a6184b6bb1717":{"type":"string","example":"front carry-facing in","can_have_multiple_values":false,"fieldname":"BabyCarrierPosition","key":"baby_carrier_position","recommended":false,"description":"Applies to wearable baby carriers. Describes the part of the body\n against which the child is placed along with the direction the child\n faces (where applicable) while in the wearable baby carrier."},"3e6c4c356607b43e111bc414a797367c":{"type":"integer","example":12,"can_have_multiple_values":false,"fieldname":"PackageQuantity","key":"package_quantity","recommended":true,"description":"The total number of items included in the package or box."},"b2e91b6002cde2bfa85933056e1fbab1":{"key":"size","fieldname":"size","recommended":true,"type":"string","description":"Size of the product item"},"e84c396def9cf6dfa460ad427e4086f1":{"type":"string","example":["Stop using if you experience swelling, rash, or fever"],"can_have_multiple_values":true,"fieldname":"StopUseIndications","key":"stop_use_indications","recommended":false,"description":"Information that describes symptoms or reactions that\n indicate when to stop using the product."},"f9f15a8a99459328f839fb1423283f15":{"type":"string","example":["Vanilla"],"can_have_multiple_values":true,"fieldname":"Scent","key":"scent","recommended":false,"description":"The scent or fragrance of your item; including items\n labelled as \"unscented\""},"ad4e681a4cf1c32d992b0119533bb4f3":{"type":"string","example":"Oil","can_have_multiple_values":false,"fieldname":"ProductForm","key":"product_form","recommended":false,"description":"The consistency, texture or formulation of the item and the way\n it will be consumed or dispensed."},"4ddda60fca4317fa3a260bc6a716eacb":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MaximumWeight","key":"maximum_weight","recommended":false,"description":"The upper weight limit or capability of an item,often used in conjunction with \"Minimum Weight\".The meaning varies with context of product.For example, when used with \"Minimum Weight\",this attribute provides weight ranges for a range of productsincluding pet medicine, baby carriers and outdoor play structures."},"9bf1fceb6bbc26681a6531a069d97089":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MinimumWeight","key":"minimum_weight","recommended":false,"description":"The lower weight limit or capability of an item,often used in conjunction with \"Maximum Weight\".The meaning varies with context of product.For example, when used with \"Maximum Weight\",this attribute provides weight ranges for a range of productsincluding pet medicine, baby carriers and outdoor play structures."},"1b2a0250577aa3367755a9d309396596":{"type":"string","example":["Apply to wet hair","Massage into scalp","Rinse thoroughly"],"can_have_multiple_values":true,"fieldname":"Instructions","key":"instructions","recommended":false,"description":"Detailed information telling how the product should be operated,\n assembled, or consumed."},"cb857165d244dc15e39ea8f1e8752ee8":{"type":"string","example":["some_string","other"],"can_have_multiple_values":true,"fieldname":"Ingredients","key":"ingredients","recommended":false,"description":"The list of all ingredients contained in an item, as found on the product label mandated by FDA guidelines."},"06824c1d350fd02b20f1ccb63dc70aa2":{"type":"string","example":"Cloth","can_have_multiple_values":false,"fieldname":"DiaperType","key":"diaper_type","recommended":false,"description":"Describes the type of diaper"},"fdb673fe23dcfd4e913ea68db30f1886":{"type":"enum","example":"Infant","can_have_multiple_values":false,"enum_values":["Newborn","Infant","Toddler"],"can_have_unknown_value":false,"fieldname":"BabyLifeStage","key":"baby_life_stage","recommended":false,"description":"Describes the life stage of the child"},"4a1709fc558601d050f61caacf1886f7":{"type":"string","example":"Stage 1","can_have_multiple_values":false,"fieldname":"BabyFoodStage","key":"baby_food_stage","recommended":true,"description":"Attribute designed to capture the generalized age grouping (commonly referred to as \"stage\") of a given baby food, as specified by manufacturer. Example descriptions: Stage 1 - Foods have a single ingredient and are pureed and generally contain about 2.5 oz of fruits, veggies or meats. Stage 2 - Foods are strained instead of pureed and have a combination of fruits or veggies instead of single ingredients, contain larger portions. Stage 3 - Foods are mashed and have more texture than the pureed foods and may have bits and chunks of meats or veggies."},"b5ab18b31d909d41c1dc88e00bac6e44":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductWidth","key":"product_width","recommended":false,"description":"The width of the fully assembled product."},"812cdd6be6bd77d8fae155eee4b5ca8e":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductLength","key":"product_length","recommended":false,"description":"The length of the fully assembled product."},"045b717bb79c0b39f9d17afd53120c44":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductHeight","key":"product_height","recommended":false,"description":"The height of the fully assembled product"},"666634cdd39d094fdf806ea000651fd9":{"type":"integer","example":12,"can_have_multiple_values":false,"fieldname":"PackageQuantity","key":"package_quantity","recommended":false,"description":"The total number of items included in the package or box."},"1f60a7e1c843194aef22644bdc923372":{"type":"string","example":["Yams"],"can_have_multiple_values":true,"fieldname":"Ingredients","key":"ingredients","recommended":false,"description":"The list of all ingredients contained in an item, as found on the product label mandated by FDA guidelines."},"0412c658ae5558750f3d8dcf73b35e2f":{"type":"string","example":["Cinnamon","Peppermint"],"can_have_multiple_values":true,"fieldname":"Flavor","key":"flavor","recommended":false,"description":"Describes the taste or flavor of the item, as described by the\n manufacturer. May be an important attribute for shoppers for items\n like dental products, medicine or baby foods."},"003aaedcb75e3bdf52a4a7c043bc83bf":{"type":"string","example":"Contains Peanuts","can_have_multiple_values":false,"fieldname":"Allergens","key":"allergens","recommended":false,"description":"Statement regarding any ingredients that may be food allergens, often written as \"Contains X\" or \"Manufactured in a facility which processes Y.\""},"f29ece641eb9d606c99f8ff1375cdafd":{"type":"string","example":16,"can_have_multiple_values":false,"fieldname":"Megapixels","key":"megapixels","recommended":true,"description":"Describes the resolution at which this item records images."},"198abe5c383734cf1f5c25725ad05626":{"type":"string","example":6,"can_have_multiple_values":false,"fieldname":"DigitalZoom","key":"digital_zoom","recommended":true,"description":"Describes the magnification power provided by a feature that electronically enlarges the image area"},"3c84275e3f255e24439d4d2acca1738c":{"type":"string","example":10,"can_have_multiple_values":false,"fieldname":"OpticalZoom","key":"optical_zoom","recommended":true,"description":"Describes the magnification power of a physical optical zoom lens."},"5546fa0a68017a13c3d54f434b16e543":{"type":"string","example":"Lenovo Thinkpad","can_have_multiple_values":false,"fieldname":"Model","key":"model","recommended":true,"description":"The common name of the model of the product. Does not include model numbers."},"c4140fbb308019e33a32ebef93a21145":{"key":"brand","fieldname":"Brand","recommended":true,"type":"string","description":"Brand name, unique manufacturer part number (MPN), or Global Trade Item Number (GTIN) of the item."},"c73360481bac2974a2647239ba9ac090":{"type":"string","example":"USB 2.0","can_have_multiple_values":false,"fieldname":"USBTechnology","key":"u_s_b_technology","recommended":false,"description":"Describes the version of USB technology on the product."},"fb5d85a3717fff61798f843282121fc6":{"type":"enum","example":["Flash"],"can_have_multiple_values":true,"enum_values":["35mm Jack","Downloadable Content","Online Multiplayer","Touchscreen","Bluetooth","GPS","SIM","USB Connectivity","WLAN","Portable","Unlocked","Auto Document Feeder","Auto Two-Sided Printing","Energy Star Certified","Integrated Speakers","3D","Smart","Flash","Microphone","Red Eye Reduction"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"e52c7222866dfa79fb54fb46377f2dba":{"type":"string","example":"USB-C","can_have_multiple_values":false,"fieldname":"USBType","key":"u_s_b_type","recommended":false,"description":"Describes the type of USB connector on the product."},"a557ee533a27f6ba2ab2896f50128d2b":{"type":"string","example":["Portrait"],"can_have_multiple_values":true,"fieldname":"ShootingModes","key":"shooting_modes","recommended":false,"description":"Describes the available settings designed to accommodate different photographic situations."},"cb76a2503550b23c7e96374acff9974c":{"type":"string","example":250,"can_have_multiple_values":false,"fieldname":"MinimumShutterSpeed","key":"minimum_shutter_speed","recommended":false,"description":"Describes the minimum shutter speed of the item. Measured in seconds."},"dfa8888400db20a0c59123675195f680":{"type":"string","example":2,"can_have_multiple_values":false,"fieldname":"SelfTimerDelay","key":"self_timer_delay","recommended":false,"description":"Length of time in seconds the self-timer will allow before it\n takes a photo"},"80a2c75641a182aabe897e4d0c5c8ea2":{"type":"measurement","example":"42 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ScreenSize","key":"screen_size","recommended":false,"description":"Describes the measurement of the device's screen, typically measured diagonally in inches."},"4b71478ae3751b69220f8f35f0f65ab9":{"type":"string","example":"1\/2.3 in","can_have_multiple_values":false,"fieldname":"SensorResolution","key":"sensor_resolution","recommended":false,"description":"One specification describing the smallest detectable incremental change of input parameter that can be detected in the output signal. For digital cameras, image sensor resolution is an important factor for image quality."},"82aef4349fbc23a369243c604b574e3a":{"type":"string","example":"f\/16","can_have_multiple_values":false,"fieldname":"MinimumAperture","key":"minimum_aperture","recommended":false,"description":"The smallest aperture this item accommodates; typically expressed in f-numbers."},"73d65ceca095eeba210477fa2c3566ca":{"type":"string","example":"f\/5","can_have_multiple_values":false,"fieldname":"FocalRatio","key":"focal_ratio","recommended":false,"description":"Ratio of the lens's focal length, to the diameter of the entrance pupil. Also known as the f-number or f-stop, this number indicates lens speed."},"7518e31e367a461a82c93d537dc2c7da":{"type":"string","example":["iPad"],"can_have_multiple_values":true,"fieldname":"CompatibleDevices","key":"compatible_devices","recommended":false,"description":"Devices compatible with the item."},"ba6bb30e5d011b3182c2d01d3ec52356":{"type":"string","example":"HDMI","can_have_multiple_values":false,"fieldname":"ConnectorType","key":"connector_type","recommended":false,"description":"Describes the types of connections supported on the item."},"aaa86538e1892f9637b83693ea86da06":{"type":"string","example":"LCD","can_have_multiple_values":false,"fieldname":"DisplayTechnology","key":"display_technology","recommended":false,"description":"Describes the type of technology that powers the display, like LED or LCD."},"3f3305be9612e01d2d0b854c2e23dd0f":{"type":"string","example":"Built-in Camera","can_have_multiple_values":false,"fieldname":"FlashType","key":"flash_type","recommended":false,"description":"The type of flash the camera has or can accommodate."},"27ac044687275eca92c8ffc695dfcfac":{"type":"string","example":18,"can_have_multiple_values":false,"fieldname":"FocalLength","key":"focal_length","recommended":false,"description":"On a camera or lens, the distance between the image sensor and the lens when the subject is in focus,stated as a range in millimeters."},"b5dd74005f37c4313d88aaf9ec09a6ce":{"type":"measurement","example":"10 h","enum_values":["s","m","h","d"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"BatteryLife","key":"battery_life","recommended":false,"description":"Describes the total battery life (or maximum run time) of the item, typically measured in hours."},"25dd344c790ce67c74887cef8bf51bf9":{"type":"string","example":["Scratch-Resistant"],"can_have_multiple_values":true,"fieldname":"LensCoating","key":"lens_coating","recommended":false,"description":"Type of thin layer of material applied to the surface of lenses or other optical elements that provide specific effects."},"37ced536fc643daf19b3e78c6109d462":{"type":"string","example":49,"can_have_multiple_values":false,"fieldname":"LensDiameter","key":"lens_diameter","recommended":false,"description":"Measurement of the diameter of the front portion of the lens, measured in mm."},"fa1806a7580ccac912c41dc13a38f9f2":{"type":"string","example":"Cooling","can_have_multiple_values":false,"fieldname":"LensFilter","key":"lens_filter","recommended":false,"description":"Describes the kind of filter attached to a lens."},"ee8a6aaa75b14a3f55320e0ff3bf4e19":{"type":"string","example":"f\/1.4","can_have_multiple_values":false,"fieldname":"MaximumAperture","key":"maximum_aperture","recommended":false,"description":"Size of the largest aperture this item accommodates; typically expressed in f-numbers."},"2693162e8e03185c2f7147c2ed198794":{"type":"string","example":0.00025,"can_have_multiple_values":false,"fieldname":"MaximumShutterSpeed","key":"maximum_shutter_speed","recommended":false,"description":"Describes the maximum shutter speed of the item. Measured in seconds."},"2af16c00b68ea710c43881873f0c0eab":{"type":"string","example":["WiFi"],"can_have_multiple_values":true,"fieldname":"WirelessTechnologies","key":"wireless_technologies","recommended":false,"description":"Describes the types of wireless technologies that can be used by the product."},"1d70a2d3ce76a127d1ffb1b2f4209ac9":{"key":"age_group","fieldname":"AgeGroup","recommended":true,"type":"enum","description":"Age group the product item is targeted towards","enum_values":["adult","all ages","infant","kids","newborn","teen","toddler"],"can_have_unknown_value":false},"6d21b5b1295293a171d1c7d989e9db81":{"type":"string","example":["Bodycon"],"can_have_multiple_values":true,"fieldname":"Style","key":"style","recommended":true,"description":"The style(s) associated with the item."},"df971d2b5138c017068b1b1ca5fe7ff0":{"key":"pattern","fieldname":"Pattern","recommended":true,"type":"string","description":"Pattern of the product item"},"7992ac8898667c0ac4a874e914c71ec0":{"type":"string","example":["Designer","Embroidered"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"03321e77f42ca941c319d9d3a696e822":{"type":"string","example":"Flutter","can_have_multiple_values":false,"fieldname":"SleeveStyle","key":"sleeve_style","recommended":false,"description":"The style of sleeves. Does not include sleeve length styles."},"ef7cf809c0d3f3dde722b692949e8a82":{"type":"enum","example":"US","can_have_multiple_values":false,"enum_values":["US","UK","EU","DE","FR","JP","CN","IT","BR","MEX","AU"],"can_have_unknown_value":true,"fieldname":"SizeSystem","key":"size_system","recommended":false,"description":"The size system used by your item, usually corresponds to Country."},"891fd9d63794da9979642269ffdf2bdb":{"type":"measurement","example":"32 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"SkirtLength","key":"skirt_length","recommended":false,"description":"The numeric length value of skirts from waist to bottom. Does not include style values like Maxi."},"d0074b6e5f6d004d8b24dee11da5c838":{"type":"measurement","example":"32 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"SleeveLength","key":"sleeve_length","recommended":false,"description":"The numeric length value of shirt sleeves. Does not include styles of shirt sleeves like 3\/4 Sleeve."},"c49d53b2f6e3b840d1b3b36cf763b823":{"type":"enum","example":"3\/4 Sleeve","can_have_multiple_values":false,"enum_values":["3\/4 Sleeve","Long Sleeve","Short Sleeve","Sleeveless"],"can_have_unknown_value":true,"fieldname":"SleeveLengthStyle","key":"sleeve_length_style","recommended":false,"description":"The style of sleeve length. Does not include sleeve styles."},"ebc88b022a77d94e80822b572e926b7a":{"type":"string","example":["Tennis"],"can_have_multiple_values":true,"fieldname":"Sport","key":"sport","recommended":false,"description":"The particular sport or activity for which your item is intended."},"5db117ce3ae7225ccccb737276630902":{"type":"enum","example":"Ankle","can_have_multiple_values":false,"enum_values":["Ankle","Crew","Knee High","Mid Calf","No Show","Over the Knee","Thigh High"],"can_have_unknown_value":true,"fieldname":"SockRise","key":"sock_rise","recommended":false,"description":"The height style of socks."},"bde7f38a6a5fa76697d288227050040e":{"type":"string","example":["Golden State Warriors"],"can_have_multiple_values":true,"fieldname":"SportsLeague","key":"sports_league","recommended":false,"description":"The particular sports league that your item represents or is associated with."},"f87289e65273a3a8c33c2fd3dc5b6d4b":{"type":"string","example":["NFL"],"can_have_multiple_values":true,"fieldname":"SportsTeam","key":"sports_team","recommended":false,"description":"The particular sports team that your item represents or is associated with."},"a9dc83480290657ae724a1d0fe346563":{"type":"enum","example":["Water Resistant"],"can_have_multiple_values":true,"enum_values":["Waterproof","Water Resistant"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"790ed72ed6a00633b47d5959d9869e00":{"type":"string","example":"Racerback","can_have_multiple_values":false,"fieldname":"UpperBodyStrapConfiguration","key":"upper_body_strap_configuration","recommended":false,"description":"The strap style for items like tops, bras, and swimsuits."},"8b9b340f74a391da8163b1edfbaeeef9":{"type":"string","example":"Ultra High","can_have_multiple_values":false,"fieldname":"WaistRise","key":"waist_rise","recommended":false,"description":"The height where the waistline of the item lies on the body."},"ed9805103a40909dbd170d6a15d59e57":{"type":"measurement","example":"30 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"WaistSize","key":"waist_size","recommended":false,"description":"The numeric size of the waist for lower body garments. Does not include generic sizes like Small."},"59d583067536c9a9f0092ad4349b4107":{"type":"string","example":"Opaque","can_have_multiple_values":false,"fieldname":"Sheerness","key":"sheerness","recommended":false,"description":"The amount of sheerness or opacity of an item. Usually used for hosiery items."},"5917325df899badf730967031c51828e":{"type":"string","example":"Relaxed","can_have_multiple_values":false,"fieldname":"PantFit","key":"pant_fit","recommended":false,"description":"The general fit style of pants. Also applies to jeans."},"5d2faf8e7cd918c37585a3582ce67d41":{"type":"string","example":"Ankle","can_have_multiple_values":false,"fieldname":"PantLengthStyle","key":"pant_length_style","recommended":false,"description":"The length style of pants. Also applies to jeans & leggings."},"79d33c7a4244cde541284dffebd8af57":{"type":"string","example":["Distressed","Faded"],"can_have_multiple_values":true,"fieldname":"DenimFeatures","key":"denim_features","recommended":false,"description":"Features, embellishments & finishes that are specific to jeans."},"088788414687d075b58111bf0a9e6b28":{"type":"integer","example":32,"can_have_multiple_values":false,"fieldname":"BraBandSize","key":"bra_band_size","recommended":false,"description":"The band size of the bra."},"f8cd81278f0a424f4552e69119f8ce3e":{"type":"string","example":"A","can_have_multiple_values":false,"fieldname":"BraCupSize","key":"bra_cup_size","recommended":false,"description":"The cup size of the bra."},"3eb05a953435b526264c76134a8b02df":{"type":"measurement","example":"34 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ChestSize","key":"chest_size","recommended":false,"description":"The numeric size of the chest measurement for the item. Does not include generic sizes like Small."},"7951a620026294a95a0ac44f9ba71eee":{"type":"string","example":"Zipper","can_have_multiple_values":false,"fieldname":"Closure","key":"closure","recommended":false,"description":"The type of fastener used to close your item."},"114da48906462d334d5d7f59893d434d":{"type":"enum","example":"Big & Tall","can_have_multiple_values":false,"enum_values":["Big & Tall","Regular","Big Boys","Big Girls","Full Size","Little Boys","Little Girls","Petite","Plus","Maternity","Baby Boy","Baby Girls","Toddler Boys","Toddler Girls"],"can_have_unknown_value":true,"fieldname":"ClothingSizeType","key":"clothing_size_type","recommended":false,"description":"The general grouping of different sizes based on age & gender."},"e1cc3ced186fc459db4f1778dabbc6c0":{"type":"string","example":"Banded","can_have_multiple_values":false,"fieldname":"CollarStyle","key":"collar_style","recommended":false,"description":"The style of collar on your item."},"07a68126da1326bbb99e0ffd81455258":{"type":"string","example":["Do Not Iron","Dry Clean Only"],"can_have_multiple_values":true,"fieldname":"FabricCareInstructions","key":"fabric_care_instructions","recommended":false,"description":"The specific care instructions for how the fabric of your item should be cleaned. This can be found on the label of the item."},"c4398a3afbb4b58166ab7090026a1c5f":{"type":"string","example":"Boot Cut","can_have_multiple_values":false,"fieldname":"PantLegStyle","key":"pant_leg_style","recommended":false,"description":"The style or cut of pant legs. Also applies to jeans."},"8908691dbe1fc7cf9b8ec543a30ccf74":{"type":"measurement","example":"30 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Inseam","key":"inseam","recommended":false,"description":"The numeric size of the inseam for items like pants, jeans and leggings. Does not include generic sizes like Small."},"0c682655422cf862d012da48c74e9045":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsAdultProduct","key":"is_adult_product","recommended":false,"description":"Indicates if your product is sexually suggestive and intended only for adults."},"e32d81cb2795fb799d41e9beb75914a1":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsCostume","key":"is_costume","recommended":false,"description":"Indicates if the item is intended to be worn as a costume."},"044e1e8f4a2fb735e0f63e44c3217379":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsOutfitSet","key":"is_outfit_set","recommended":false,"description":"Indicates if the product has 2 or more different items that come as part of a matching or oufit set, like matching shirt & pants or bra & underwear set"},"11c967a5fc1a473d71ba4e8ac43d35c4":{"type":"string","example":"Acid Wash","can_have_multiple_values":false,"fieldname":"JeanWash","key":"jean_wash","recommended":false,"description":"The post-process wash treatment that may alter color or texture of denim products."},"f26b323c65bc8413143b53c424cb106c":{"type":"string","example":"Crew Neck","can_have_multiple_values":false,"fieldname":"Neckline","key":"neckline","recommended":false,"description":"The neckline or neck style of the item."},"efe63cfc2af39e9b3904b04f339137a8":{"type":"string","example":["Bridesmaid"],"can_have_multiple_values":true,"fieldname":"Occasion","key":"occasion","recommended":false,"description":"The type of special occassion(s) for which your item is intended or specialized."},"00efcecb28226b61fa715ceed2408546":{"type":"string","example":"Banded","can_have_multiple_values":false,"fieldname":"WaistStyle","key":"waist_style","recommended":false,"description":"The style of the waist on the item. Can apply to pants or dresses."},"f8b8550acb981fe24299736073b56104":{"type":"string","example":["Bow Tie"],"can_have_multiple_values":true,"fieldname":"Style","key":"style","recommended":true,"description":"The style(s) associated with the item."},"a53318a479999a52de362427c1af31da":{"type":"string","example":"Narrow","can_have_multiple_values":false,"fieldname":"SunglassesWidth","key":"sunglasses_width","recommended":false,"description":"The width of the sunglasses frame."},"422e14c47d8c95351a13574b5ffe3076":{"type":"string","example":"Anti-Reflective","can_have_multiple_values":false,"fieldname":"SunglassesLensTechnology","key":"sunglasses_lens_technology","recommended":false,"description":"The technology or treatment of sunglasses lenses."},"36415ae546c8d7681c9ede23fdc1ddc3":{"type":"enum","example":"Beige","can_have_multiple_values":false,"enum_values":["Beige","Black","Blue","Bronze","Brown","Gold","Gray","Green","Multi-Color","Orange","Pink","Purple","Red","Silver","White","Yellow"],"can_have_unknown_value":true,"fieldname":"SunglassesLensColor","key":"sunglasses_lens_color","recommended":false,"description":"The color of sunglasses lenses."},"70c39caa59cfd987167f972dd9aba990":{"type":"string","example":"Classic","can_have_multiple_values":false,"fieldname":"TieWidth","key":"tie_width","recommended":false,"description":"The width of tie."},"8125fc680ed8690436264f94a52dd4e9":{"type":"string","example":["Chukka"],"can_have_multiple_values":true,"fieldname":"Style","key":"style","recommended":true,"description":"The style(s) associated with the item."},"cd9f78020f15de834fcc58d3d563ebac":{"type":"string","example":"A","can_have_multiple_values":false,"fieldname":"ShoeWidth","key":"shoe_width","recommended":true,"description":"The width of the shoes."},"b0bd5a2777af18be80307b03175a050a":{"type":"enum","example":["Water Resistant"],"can_have_multiple_values":true,"enum_values":["Orthopedic","Waterproof","Water Resistant"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"30bc46e76de465db006632f51b9dc9bc":{"type":"enum","example":"Flats","can_have_multiple_values":false,"enum_values":["Flats","Boots","Heels","Sandals","Slippers","Athletic Shoes","Fashion Sneakers"],"can_have_unknown_value":true,"fieldname":"ShoeType","key":"shoe_type","recommended":false,"description":"The type of shoes."},"eb7731477ae172c98b8653d26038d351":{"type":"string","example":"Wedge","can_have_multiple_values":false,"fieldname":"HeelStyle","key":"heel_style","recommended":false,"description":"The style of heel on the shoes."},"9847453e3dfb3f97dd262911e96927fc":{"type":"measurement","example":"0.5 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"HeelHeight","key":"heel_height","recommended":false,"description":"The numeric height of the heel on the shoes."},"24cdfc97c883070990bfe53a9ab4fcc1":{"type":"string","example":["Hoops"],"can_have_multiple_values":true,"fieldname":"Style","key":"style","recommended":true,"description":"The style(s) associated with the item."},"ae3548dbfd62e601abeefe809b9804fe":{"type":"string","example":["Ruby","Emerald"],"can_have_multiple_values":true,"fieldname":"Gemstone","key":"gemstone","recommended":true,"description":"The type of gemstone(s) in your item."},"c2b8ee902fdca1b35815f183af905f6a":{"type":"string","example":["Vintage","Engraved"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"f0933d6a49ace1948a6f904be052d459":{"type":"enum","example":["Resizable"],"can_have_multiple_values":true,"enum_values":["Resizable","Water Resistant"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"0a55223a8807dfafc4e957899053f571":{"type":"string","example":"Silver","can_have_multiple_values":false,"fieldname":"PlatingMaterial","key":"plating_material","recommended":false,"description":"The type of metal or material which your item is plated or covered with."},"deb41e4835824a3ada806d318df5ffe0":{"type":"string","example":"14k","can_have_multiple_values":false,"fieldname":"MetalStampOrPurity","key":"metal_stamp_or_purity","recommended":false,"description":"The metal purity of your item. Sometimes this is indicated or stamped directly onto jewelry items."},"6e7562a9f0a1c4675f7ca5d15cf53e6a":{"type":"string","example":"2 prong","can_have_multiple_values":false,"fieldname":"JewelrySettingStyle","key":"jewelry_setting_style","recommended":false,"description":"The style in which stones are set within or attached to a piece of jewelry"},"f0f118d833eecf0a3d4deb47ce1e8a2a":{"type":"string","example":["Best Friends Forever"],"can_have_multiple_values":true,"fieldname":"Inscription","key":"inscription","recommended":false,"description":"The text of what is engraved on the item. (Multiple Values Accepted)"},"3ed35b95494c9b3f2985fdb9dff7730d":{"type":"string","example":1.29,"can_have_multiple_values":false,"fieldname":"GemstoneWeight","key":"gemstone_weight","recommended":false,"description":"The total weight or mass (in carats) of the individual gemstone."},"58ba4a0325e3756373a8383a2bc5377d":{"type":"string","example":5,"can_have_multiple_values":false,"fieldname":"GemstoneWidth","key":"gemstone_width","recommended":false,"description":"The width measurement of the gemstone in milimeters."},"8e0135de1890e1bc54c6f4524d2bb6a1":{"type":"string","example":["Dyed","Heat Treated"],"can_have_multiple_values":true,"fieldname":"GemstoneTreatment","key":"gemstone_treatment","recommended":false,"description":"Indicates any treatments or processing of the stone to change its color, clarity or durability."},"af11df6c0242d4276dc13b175379b723":{"type":"string","example":5,"can_have_multiple_values":false,"fieldname":"GemstoneLength","key":"gemstone_length","recommended":false,"description":"The length measurement of the gemstone in milimeters."},"8f70200f0fd2e1a7987947575021f910":{"type":"string","example":5,"can_have_multiple_values":false,"fieldname":"GemstoneHeight","key":"gemstone_height","recommended":false,"description":"The height measurement of the gemstone in milimeters."},"6ad2f369b3c9e5177d46ce54aaa855e3":{"type":"string","example":"Asscher","can_have_multiple_values":false,"fieldname":"GemstoneCut","key":"gemstone_cut","recommended":false,"description":"The style in which the gemstone(s) of your item have been cut and their general shape."},"be0f716b198ea39563b1ae49c03feaa7":{"type":"string","example":"Natural","can_have_multiple_values":false,"fieldname":"GemstoneCreationMethod","key":"gemstone_creation_method","recommended":false,"description":"The method by which the stone was created. Indicates if the stone is natural or manmade."},"087b63be2ec0b2c73fdeb21260a8429e":{"type":"string","example":"Colorless","can_have_multiple_values":false,"fieldname":"GemstoneColor","key":"gemstone_color","recommended":false,"description":"The color of the gemstone(s) in your item that accounts for hue, tone and saturation."},"40496e7589d7a3e945471afaa9b5eb77":{"type":"string","example":"FL","can_have_multiple_values":false,"fieldname":"GemstoneClarity","key":"gemstone_clarity","recommended":false,"description":"The quality and clarity of the visual aspect of the gemstone, particularly important for Diamonds. Indicates visual and and internal characteristics and surface defects of blemishes."},"3b714bc4f27197b27df4ed555063b227":{"type":"string","example":"Clip-On","can_have_multiple_values":false,"fieldname":"EarringBackFinding","key":"earring_back_finding","recommended":false,"description":"The type of fastening method for the backs of earrings."},"2a4450be3608cf3a38cad25f7d49b813":{"type":"string","example":"Lobster Clasp","can_have_multiple_values":false,"fieldname":"ClaspType","key":"clasp_type","recommended":false,"description":"The type of clasp or closure method of your item."},"b8b24c8698213706e91fb53948de8a69":{"type":"measurement","example":"12 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ChainLength","key":"chain_length","recommended":false,"description":"The length of the jewelry chain. Usually in inches."},"2ad129e62056d93bd1201aef398651bb":{"type":"string","example":1.29,"can_have_multiple_values":false,"fieldname":"TotalGemstoneWeight","key":"total_gemstone_weight","recommended":false,"description":"The total combined weight or mass (in carats) of all stones in the piece of jewelry."},"d9e0fd21a2211dee29551f555ae1036d":{"type":"string","example":["Bangle"],"can_have_multiple_values":true,"fieldname":"Style","key":"style","recommended":true,"description":"The style(s) associated with the item."},"cf48a2e1304c7e8e3df5e6a9eb67e991":{"type":"enum","example":"Electric","can_have_multiple_values":false,"enum_values":["Electric","Batteries"],"can_have_unknown_value":true,"fieldname":"PowerType","key":"power_type","recommended":false,"description":"Provides information on the exact type of power used by the item."},"abfc9636c9dd70941b01e4e077588073":{"type":"enum","example":["Calendar"],"can_have_multiple_values":true,"enum_values":["Calendar","Resizable","Water Resistant","Waterproof"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"0f94d987d41ce3cc234ca9051c468234":{"type":"measurement","example":"240 mm","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"WatchBandLength","key":"watch_band_length","recommended":false,"description":"The length of the watch band"},"8ea77ea069e2c0b4b74c167d9e394faf":{"type":"string","example":["Leather","Stainless Steel"],"can_have_multiple_values":true,"fieldname":"WatchBandMaterial","key":"watch_band_material","recommended":false,"description":"The primary material(s) from which the band of the watch is made."},"d3ac14e44af9ea925fd801578da42a63":{"type":"measurement","example":"22 mm","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"WatchBandWidth","key":"watch_band_width","recommended":false,"description":"The width of the watch band"},"028cde57179c9c4356a63649d170c6c4":{"type":"measurement","example":"42 mm","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"WatchCaseDiameter","key":"watch_case_diameter","recommended":false,"description":"The diameter of the watch case or dial"},"f4b65f0456fd44dd79accf30fa6002f6":{"type":"string","example":"Round","can_have_multiple_values":false,"fieldname":"WatchCaseShape","key":"watch_case_shape","recommended":false,"description":"The shape of the watch case or enclosure which contains the face & inner workings of the watch."},"37da4cf70f57a2eaf2671145d216b16e":{"type":"measurement","example":"12 mm","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"WatchCaseThickness","key":"watch_case_thickness","recommended":false,"description":"The thickness of the watch case or dial"},"eba94cf3d4446cdb773987c97f384918":{"type":"string","example":["Yoga","Sailing"],"can_have_multiple_values":true,"fieldname":"Activity","key":"activity","recommended":false,"description":"The particular sport or activity for which your item is intended."},"44084d5972f3b03d6abe5887c6dfd4b0":{"type":"string","example":["Ruby","Emerald"],"can_have_multiple_values":true,"fieldname":"Gemstone","key":"gemstone","recommended":false,"description":"The type of gemstone(s) in your item."},"9a6f633320e996ae1d5bad38d51e085c":{"type":"string","example":"Quartz","can_have_multiple_values":false,"fieldname":"WatchMovementType","key":"watch_movement_type","recommended":false,"description":"The type of movement within the watch"},"fe4c9e79e3986fe439f5ba1c21828f2e":{"type":"measurement","example":"1 TB","enum_values":["KB","MB","GB","TB"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"StorageCapacity","key":"storage_capacity","recommended":true,"description":"Describes the amount of storage space on the item's hard drive, typically measured in megabytes, gigabytes or terabytes."},"2390176fad8a47f031329e771da0e400":{"type":"string","example":"Android","can_have_multiple_values":false,"fieldname":"OperatingSystem","key":"operating_system","recommended":true,"description":"Describes the type of preloaded operating system software installed on the device."},"49b1cf42befb0ba138e430326fbc6ea6":{"type":"measurement","example":"42 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ScreenSize","key":"screen_size","recommended":true,"description":"Describes the measurement of the device's screen, typically measured diagonally in inches."},"567aba0d72ce14b0928d5e6aa61c7f35":{"type":"string","example":24,"can_have_multiple_values":false,"fieldname":"RearFacingCameraResolution","key":"rear_facing_camera_resolution","recommended":false,"description":"Describes the maximum resolution of the item's rear facing camera, in megapixels."},"a5dc22c3e935ab432331f4cab30c0787":{"type":"measurement","example":"3 GHz","enum_values":["Hz","KHz","MHz","GHz"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProcessorSpeed","key":"processor_speed","recommended":false,"description":"Describes the operational frequency of the computer's CPU"},"361b07f5140feaec4be03122ed0d6287":{"type":"string","example":"Intel Core i7","can_have_multiple_values":false,"fieldname":"ProcessorType","key":"processor_type","recommended":false,"description":"Describes commonly used name of the computer's CPU"},"fe18897b738f817319015eb3048928e5":{"type":"measurement","example":"16 GB","enum_values":["KB","MB","GB","TB"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"RamMemory","key":"ram_memory","recommended":false,"description":"Desribes the amount of RAM memory that is preinstalled on the product."},"083cb9b61b45283ca9ee93f906516300":{"type":"integer","example":1080,"can_have_multiple_values":false,"fieldname":"Resolution","key":"resolution","recommended":false,"description":"Describes the resolution of the product screen"},"a59afd07b13fe423f4ea99faec8453d8":{"type":"string","example":24,"can_have_multiple_values":false,"fieldname":"VideoResolution","key":"video_resolution","recommended":false,"description":"Describes the resolution of the video recordings of the product in\n megapixels"},"3b621ecd047fb5f084be32fc1afb6389":{"type":"string","example":"ATX","can_have_multiple_values":false,"fieldname":"MotherboardFormFactor","key":"motherboard_form_factor","recommended":false,"description":"Describes one of the standard physical sizes to which the computer motherboard conforms"},"bfe5d2ed096364fe145cc59a87f41760":{"type":"string","example":["CD ROM"],"can_have_multiple_values":true,"fieldname":"OpticalDrive","key":"optical_drive","recommended":false,"description":"Describes the type of optical drives included with the product"},"ec6456439bf772caeb9e8304cb32ec3e":{"type":"measurement","example":"16 GB","enum_values":["KB","MB","GB","TB"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MaximumSupportedRam","key":"maximum_supported_ram","recommended":false,"description":"Describes the maximum amount of RAM memory that can be supported by the product."},"70d088a2087eeddc317dedc4846e71e1":{"type":"enum","example":"Internal","can_have_multiple_values":false,"enum_values":["Internal","External"],"can_have_unknown_value":true,"fieldname":"HardDriveType","key":"hard_drive_type","recommended":false,"description":"Describes whether the hard drives of the product are internal or external"},"4a2d5d0019d9f4e3e553461d450eb409":{"type":"string","example":"Nvidia GeForce RTX 2080","can_have_multiple_values":false,"fieldname":"GraphicsCardModel","key":"graphics_card_model","recommended":false,"description":"Describes the model name of the graphics card included with the product"},"ea1ec0d2e16be590eee6a2ede6da6435":{"type":"string","example":24,"can_have_multiple_values":false,"fieldname":"FrontFacingCameraResolution","key":"front_facing_camera_resolution","recommended":false,"description":"Describes the maximum resolution of the item's front facing camera, in megapixels."},"b6049f7a7d322c6402d8e55ff0041d93":{"type":"string","example":"AM3","can_have_multiple_values":false,"fieldname":"CpuSocketType","key":"cpu_socket_type","recommended":false,"description":"The interface of, or required by, the central processing unit."},"54919ad5f3d7792c8e13c4bde36632bf":{"type":"string","example":"Full Tower","can_have_multiple_values":false,"fieldname":"ComputerCaseFormFactor","key":"computer_case_form_factor","recommended":false,"description":"Describes one of the standard physical sizes to which the computer case conforms"},"b31777d6275a27c26f1e9928c503ef19":{"type":"string","example":"Bluetooth 4.0","can_have_multiple_values":false,"fieldname":"BluetoothTechnology","key":"bluetooth_technology","recommended":false,"description":"Describes the type of version of the compatible bluetooth."},"dacac94d354a921cff590fa3d34d6078":{"type":"string","example":12,"can_have_multiple_values":false,"fieldname":"StandbyTime","key":"standby_time","recommended":false,"description":"Describes the total stand-by time in hours of the phone."},"ed57863b87213a9ffe54d40f978635b8":{"type":"string","example":12,"can_have_multiple_values":false,"fieldname":"TalkTime","key":"talk_time","recommended":false,"description":"Describes the total talk time in hours of the phone."},"643ec7fd851671f9f0fe60199b37bf0c":{"type":"string","example":["Leather"],"can_have_multiple_values":true,"fieldname":"WatchBandMaterial","key":"watch_band_material","recommended":false,"description":"The materials from which the band of the watch is made."},"d0aae07685ed17d8f4d00a2658fbb437":{"type":"string","example":["Standard SIM"],"can_have_multiple_values":true,"fieldname":"SimTypes","key":"sim_types","recommended":false,"description":"Describes the type of SIM compatible with the product, like Mini-SIM, Dual SIM."},"f2d22b905571ec1b0c9722ed6c227125":{"type":"integer","example":1,"can_have_multiple_values":false,"fieldname":"NumberofSIMCardSlots","key":"numberof_s_i_m_card_slots","recommended":false,"description":"Describes the number of SIM card slots on the product."},"7c8efd858532f7cdf437cc9fb39a0bec":{"type":"string","example":"3G","can_have_multiple_values":false,"fieldname":"CellularGeneration","key":"cellular_generation","recommended":false,"description":" Describes the communications network generation of the cell phone"},"65fe00497801a23a1285c1bdfba66014":{"type":"string","example":"CDMA","can_have_multiple_values":false,"fieldname":"CellularBand","key":"cellular_band","recommended":false,"description":"Describes the cellular band or network technology used by the device."},"fe1280e0d1b522e738d01296e5efb34f":{"type":"string","example":"Verizon","can_have_multiple_values":false,"fieldname":"CellPhoneServiceProvider","key":"cell_phone_service_provider","recommended":false,"description":"Describes the company that provides the phone's cellular service (if not unlocked)"},"bbc7f8045d5073625f856ac52313df47":{"type":"string","example":"Wristwatch","can_have_multiple_values":false,"fieldname":"WatchStyle","key":"watch_style","recommended":false,"description":"The style of watch."},"707d4ddb458001de9dd489dc081a917a":{"type":"string","example":["iPad"],"can_have_multiple_values":true,"fieldname":"CompatibleDevices","key":"compatible_devices","recommended":true,"description":"Devices compatible with the item."},"30c69d289f07754985fa521022655ba0":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductWeight","key":"product_weight","recommended":false,"description":"The weight of the fully assembled product."},"10a6af510a4d49ca6eeaebfbead6c6fa":{"type":"measurement","example":"40 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MinimumScreenSize","key":"minimum_screen_size","recommended":false,"description":" Describes the minimum size of the TV\/Monitor that the mount can\n accommodate"},"b1bac032a961eb0cff6df86fce2da4c4":{"type":"string","example":"Fixed Mount","can_have_multiple_values":false,"fieldname":"MountType","key":"mount_type","recommended":false,"description":"Describes how the TV or monitor is attached and degree of\n adjustment of position is allowed once the mount is installed"},"bdcaca96c46e181c0d4bf347097c228e":{"type":"measurement","example":"55 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MaximumScreenSize","key":"maximum_screen_size","recommended":false,"description":"Describes the maximum size of the TV\/Monitor that the mount can\n accommodate"},"ec7db52e6443df6d84672fa3397e4144":{"type":"measurement","example":"45 lb","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MaxLoadWeight","key":"max_load_weight","recommended":false,"description":"Describes the amount of weight that the TV\/Monitor mount\n can support as certified by the manufacturer"},"91f569f41bdde8d40c421f04d9f0ec23":{"type":"string","example":["In-Ear"],"can_have_multiple_values":true,"fieldname":"HeadphoneFeatures","key":"headphone_features","recommended":false,"description":"List features specific to headphones"},"158bcad2efdd1b1f944e632d8603c189":{"type":"measurement","example":"2 ft","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"CableLength","key":"cable_length","recommended":false,"description":"Total length of electronics cable"},"8904e34635ccfa9f1776f6bf8964d571":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductDepth","key":"product_depth","recommended":true,"description":"The depth of the fully assembled product."},"1e86882555078459f4919858583e9fce":{"type":"integer","example":1080,"can_have_multiple_values":false,"fieldname":"Resolution","key":"resolution","recommended":true,"description":"Describes the resolution of the product screen"},"75bf93f645a2702cd3dc1aeac96fcc79":{"type":"integer","example":50,"can_have_multiple_values":false,"fieldname":"MonochromePagesPerMinute","key":"monochrome_pages_per_minute","recommended":false,"description":"The number of monochrome pages that the imaging device is able to produce per minute."},"bf9c9a51c205f8c02070a7aa2e11d65b":{"type":"enum","example":"Monochrome","can_have_multiple_values":false,"enum_values":["Monochrome","Color"],"can_have_unknown_value":true,"fieldname":"MonochromeOrColor","key":"monochrome_or_color","recommended":false,"description":"Is the imaging device capable of color processing or monochrome only?"},"eefa8dd52fadfc95322a8c584a87e1c5":{"type":"integer","example":12,"can_have_multiple_values":false,"fieldname":"ColorPagesPerMinute","key":"color_pages_per_minute","recommended":false,"description":"The number of color pages that the imaging device is able to produce per minute."},"be84c1ccb42a2826aa12efb3ad494d6e":{"type":"string","example":"LCD","can_have_multiple_values":false,"fieldname":"DisplayTechnology","key":"display_technology","recommended":true,"description":"Describes the type of technology that powers the display, like LED or LCD."},"fece1f8c30e55cec967050c8d46d2179":{"type":"string","example":5,"can_have_multiple_values":false,"fieldname":"ResponseTime","key":"response_time","recommended":false,"description":"Describes the amount of time it takes for the pixels in a display to change, measured in miliseconds."},"d2b0fda41f2dc69846c9a72ee97b6304":{"type":"string","example":60,"can_have_multiple_values":false,"fieldname":"RefreshRate","key":"refresh_rate","recommended":false,"description":"Describes the refresh rate of the display. This measures the number of times the picture is updated per second, measured in Hz."},"0307a27632bdff957e247336e336c958":{"type":"string","example":"200 x 200","can_have_multiple_values":false,"fieldname":"VesaMountingStandard","key":"vesa_mounting_standard","recommended":false,"description":"The VESA Standard defines the distance in millimeters between the\n four mounting holes on the back of a TV (distance horizontally x\n distance vertically)."},"0ea98808c27886d1dae8ceaa3aaa2260":{"type":"string","example":"4:3","can_have_multiple_values":false,"fieldname":"AspectRatio","key":"aspect_ratio","recommended":false,"description":"Describes the relationship between the product's width and its height."},"0abb978f2c8edd1d059e564a4e41e744":{"type":"integer","example":3,"can_have_multiple_values":false,"fieldname":"NumberOfHdmiports","key":"number_of_hdmiports","recommended":false,"description":"The number of HDMI ports on the television or monitor"},"82229416d35b701d3f141174aa5f054b":{"type":"string","example":"20,000:1","can_have_multiple_values":false,"fieldname":"MaximumContrastRatio","key":"maximum_contrast_ratio","recommended":false,"description":"The ratio between the luminance of the brightest color to that of\n the darkest color capable of being displayed."},"2da53aa14b92ca922b59fdea5a6a69d6":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsAssemblyRequired","key":"is_assembly_required","recommended":false,"description":"Indicates if the product arrives unassembledand must be put together before use."},"6fa83aef4f8623080b9b36b3373d650f":{"type":"string","example":"CCFL","can_have_multiple_values":false,"fieldname":"BacklightTechnology","key":"backlight_technology","recommended":false,"description":"Describes the technology used to backlight the screen or television. Commonly Cathold Fluorescent Tubes (CCFL) or Light Emitting Diodes (LED)"},"459473687330b5617bdaf470bcf83a7e":{"type":"string","example":5,"can_have_multiple_values":false,"fieldname":"AudioPowerOutput","key":"audio_power_output","recommended":false,"description":"Describes the power of the audio output of the device's speakers, measured in watts."},"81c8727757c4fd1d1d12f5d261744c57":{"type":"string","example":["Noise Cancelling"],"can_have_multiple_values":true,"fieldname":"AudioFeatures","key":"audio_features","recommended":false,"description":"Describes whether the product has certain special audio features."},"1e2de3306f34ebe0755bb8f5297f9cb0":{"type":"string","example":1.8,"can_have_multiple_values":false,"fieldname":"ThrowRatio","key":"throw_ratio","recommended":false,"description":"The relation between the throw distance and the image width; tells\n us what image size we can project from a certain distance away."},"755632f8c8070139f1d7b1d8817eeac3":{"type":"string","example":6500,"can_have_multiple_values":false,"fieldname":"LampLife","key":"lamp_life","recommended":false,"description":"The expected life of the projection lamp in hours."},"697539305c05f8a9a0fe6e97e2eab4d0":{"type":"string","example":2000,"can_have_multiple_values":false,"fieldname":"Brightness","key":"brightness","recommended":false,"description":"Brightness per bulb measured in lumens."},"fba4b5b5f790c6348fabe6c10d0f8bf6":{"type":"string","example":"Xbox 360","can_have_multiple_values":false,"fieldname":"VideoGamePlatform","key":"video_game_platform","recommended":true,"description":"Describes the type of platform on which video game software is capable of running."},"01691d8e5b9ed5a58a109dc90b74f439":{"type":"string","example":"Fallout","can_have_multiple_values":false,"fieldname":"VideoGameSeries","key":"video_game_series","recommended":false,"description":"The name of the video game series this game belongs to."},"ecb8b647ae87edddac43b94a3093e72c":{"type":"string","example":"E - Everyone","can_have_multiple_values":false,"fieldname":"VideoGameRating","key":"video_game_rating","recommended":false,"description":"Describes the standard rating of the content of the video game. Can be important for violent games or games intended only for mature audiences."},"532c713f0d2a4408702814f32c02020f":{"type":"string","example":"Shooter","can_have_multiple_values":false,"fieldname":"VideoGameGenre","key":"video_game_genre","recommended":false,"description":"Describes the genre, style or type of video game being sold."},"e65585ff17b284d24ee18e28851f6ac8":{"type":"measurement","example":"1 TB","enum_values":["KB","MB","GB","TB"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"StorageCapacity","key":"storage_capacity","recommended":false,"description":"Describes the amount of storage space on the item's hard drive, typically measured in megabytes, gigabytes or terabytes."},"9a9c97dfb6df9491e73d4ba7d39e2460":{"type":"string","example":["Kinect"],"can_have_multiple_values":true,"fieldname":"RequiredPeripherals","key":"required_peripherals","recommended":false,"description":"Indicates any type of required accessory or peripheral necessary to operate the item (or play the video game)."},"a36f46f58ba3a8907408d6c24e50bfad":{"type":"string","example":"09-19-2019","can_have_multiple_values":false,"fieldname":"ReleaseDate","key":"release_date","recommended":false,"description":"Describes the specific date which marks when the product was made available for public distribution, provided in the format MM-DD-YYYY"},"48504b28464be452dc971f271b0eef35":{"type":"string","example":"CD","can_have_multiple_values":false,"fieldname":"PhysicalMediaFormat","key":"physical_media_format","recommended":false,"description":"Describes the standard media format in which the product exists."},"95f1c14e6ac4218a6af57710a935fb6f":{"type":"string","example":"Android","can_have_multiple_values":false,"fieldname":"OperatingSystem","key":"operating_system","recommended":false,"description":"Describes the type of preloaded operating system software installed on the device."},"87ee129e6abae679ef3dc1881c29ac4c":{"type":"string","example":"Natural\/Unfinished","can_have_multiple_values":false,"fieldname":"Finish","key":"finish","recommended":true,"description":"The external treatment to the productthat usually includes a change inappearance or texture to the item.Commonly used for furniture includewood, metal and fabric."},"73c8639362fab24e43a3fa21a122d3f6":{"type":"string","example":"Bohemian","can_have_multiple_values":false,"fieldname":"DecorStyle","key":"decor_style","recommended":true,"description":"The decorative style in which the product was made."},"9c05349004f01b710d863a5bcc135754":{"type":"string","example":["Designer"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"447e1ca997ac7372d84321a5da8b9577":{"type":"string","example":["Family Room"],"can_have_multiple_values":true,"fieldname":"RecommendedRooms","key":"recommended_rooms","recommended":false,"description":"The rooms where the item is likely or recommended to be used."},"cb8a3c1875a379537c185708e6662ba6":{"type":"measurement","example":"20 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"SeatBackHeight","key":"seat_back_height","recommended":false,"description":"Indicates the seat back height from the base of the seat to the top of the back. This may be separate from the \"Assembled Product Height\" and \"Seat Height\" attributes."},"ed80e4f1f84fcb9b076e9089aa9b73da":{"type":"measurement","example":"36 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"SeatHeight","key":"seat_height","recommended":false,"description":"Indicates height from the floor to the top of the seat. This may be separate from the \"Assembled Product Height\" and \"Seat Back Height\" attributes."},"eaf4eb99a4c71f786c74f207839181ab":{"type":"string","example":"Leather","can_have_multiple_values":false,"fieldname":"SeatMaterial","key":"seat_material","recommended":false,"description":"The material of the item's seat cushion. This may be separate from the item's main material composition, which falls under the \"Material\" attribute."},"f2d839922ab1a15c3720eb42f01393ff":{"type":"string","example":"Square","can_have_multiple_values":false,"fieldname":"Shape","key":"shape","recommended":false,"description":"The general shape of the product. Often used to describe\n furniture and home furnishings."},"00d4ef3a1bb967e59e960f07a8a36010":{"type":"enum","example":["Antique"],"can_have_multiple_values":true,"enum_values":["Foldable","Inflatable","Pump Included","Wheeled","Antique"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"2733dc5d8c97d75657a86568037a0609":{"type":"integer","example":4,"can_have_multiple_values":false,"fieldname":"NumberOfDrawers","key":"number_of_drawers","recommended":false,"description":"The number of drawers included in the product."},"9e1903c5cd2876e1c9889eb5cea8045a":{"type":"integer","example":4,"can_have_multiple_values":false,"fieldname":"NumberOfShelves","key":"number_of_shelves","recommended":false,"description":"The number of shelves included in the product."},"8cafc76619e3f64c83abec41a95b9915":{"type":"string","example":"Wall Mount","can_have_multiple_values":false,"fieldname":"MountType","key":"mount_type","recommended":false,"description":"The method by which the item is attached or anchored. Used for products such as shelving and other fixtures."},"97bdb9242e7b2962284619b2ce7c06a4":{"type":"measurement","example":"10 in","enum_values":["mm","cm","m","in","ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"MattressThickness","key":"mattress_thickness","recommended":false,"description":"The measure from the bottom of the mattress to the crown"},"a700f8e116174455d5d9f3782aa0bf4e":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsPowered","key":"is_powered","recommended":false,"description":"Indicates if the item uses electricity and requires a power cord or batteries to operate."},"7f54c0815b0e8d9cb192bdc4819bd7f5":{"type":"enum","example":"Indoor Only","can_have_multiple_values":false,"enum_values":["Indoor Only","Outdoor Only","Indoor\/Outdoor"],"can_have_unknown_value":true,"fieldname":"IndoororOutdoor","key":"indooror_outdoor","recommended":false,"description":"Indicates if the item is indoor only, outdoor only, or intended for both."},"39a086121f568673a43aedb5478c26d4":{"type":"string","example":"Foam","can_have_multiple_values":false,"fieldname":"FillMaterial","key":"fill_material","recommended":false,"description":"The material used to stuff the item usually in cushions, pillows,\n mattresses, and bean bags."},"d17ad1a388d5c83e6d89a16d3ac964fb":{"type":"string","example":"Extra Firm","can_have_multiple_values":false,"fieldname":"ComfortLevel","key":"comfort_level","recommended":false,"description":"The firmness or softness of a mattress."},"9d73d1c85fae03275869c6806d30fd93":{"type":"string","example":"Canopy Bed","can_have_multiple_values":false,"fieldname":"BedFrameType","key":"bed_frame_type","recommended":false,"description":"The type or style of the bed. Does not include Futons, Day Beds, or Sleepers."},"7d8fefe9bf9918c271f908a0e83f5f16":{"type":"enum","example":["Wheeled"],"can_have_multiple_values":true,"enum_values":["Foldable","Wheeled","Antique"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"e009f02a406e7aab29c5ab8230d08848":{"type":"string","example":"Natural\/Unfinished","can_have_multiple_values":false,"fieldname":"Finish","key":"finish","recommended":false,"description":"The external treatment to the productthat usually includes a change inappearance or texture to the item.Commonly used for furniture includewood, metal and fabric."},"13828083302ba311fdebc396a1610bf6":{"type":"string","example":["Fever"],"can_have_multiple_values":true,"fieldname":"HealthConcern","key":"health_concern","recommended":true,"description":"Indicates if the item is meant to alleviate particular health issues, illnesses or life stages. For concerns specific to skin care, please use the Skin Care Concern attribute."},"11f3261c7ccebb79e06751f778d5d4ab":{"type":"measurement","example":"12 oz","enum_values":["ml","l","oz","cu_ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Capacity","key":"capacity","recommended":true,"description":"Indicates the capacity or volume of your item. This is important for buyers to know the amount of product they are receiving and is important for skin care, beauty & hair care products."},"2d80b0c58142a82357f2d2fdfafd9068":{"type":"string","example":["Beeswax"],"can_have_multiple_values":true,"fieldname":"Ingredients","key":"ingredients","recommended":true,"description":"The list of all ingredients contained in an item, as found on the product label mandated by FDA guidelines."},"365ecf662d48185b92a5aa253d935173":{"type":"string","example":"3 to 5 hours","can_have_multiple_values":false,"fieldname":"ResultTime","key":"result_time","recommended":false,"description":"Duration of time necessary to see the outcome from using a product. Typically used for medical and personal care test kits and monitors."},"7699774215529bc8717eb00ce738c58a":{"type":"string","example":"Heavy","can_have_multiple_values":false,"fieldname":"Absorbency","key":"absorbency","recommended":false,"description":"Term describing the ability of a product to absorb moisture. Used in personal care products such as pads and liners."},"2639fc784370fb97d9a426b33e6eff0e":{"type":"measurement","example":"0.4 ml","enum_values":["ml","l","oz","cu_ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ServingSize","key":"serving_size","recommended":false,"description":"Measurement value specifying the amount of the item typically used as a reference on the label of that item to list per serving information (nutrients, calories, total fat). Applicable for a wide variety of products including food, beverages, and nutritional supplements."},"336df2b3fca4bc8318f7589b8c888d03":{"type":"string","example":["Dry Skin"],"can_have_multiple_values":true,"fieldname":"SkinCareConcern","key":"skin_care_concern","recommended":false,"description":"Indicates if the item is meant to alleviate particular skin care issues. For general health concerns like obesity, or blood pressure please use the Health Concerns attribute. Values may be similar to the Skin Type attribute - \"dry cracked skin\" may be a cocnern but \"dry\" is a skin type."},"eba9b3d21340c3ed25d6778417988888":{"type":"enum","example":"Oily","can_have_multiple_values":false,"enum_values":["Oily","Dry","Combination","Sensitive"],"can_have_unknown_value":true,"fieldname":"SkinType","key":"skin_type","recommended":false,"description":"Indicates the general skin type that the product is intended for on the oily\/dry spectrum."},"cffbfe91501fcda43b326b2797a39ee0":{"type":"integer","example":15,"can_have_multiple_values":false,"fieldname":"SpfValue","key":"spf_value","recommended":false,"description":"Indicates the strength of SPF (Sun Protection Factor) in an item. This describes how well the product can block out harmful rays from the run. Commonly found in suncreen and makeup products."},"4f2642a8dcd42338499b2aa75ffca1fe":{"type":"enum","example":["Reusable"],"can_have_multiple_values":true,"enum_values":["Adaptive Lenses","Automatic Shut Off","Cordless","Foldable","Industrial","Latex-Free","Non-Comedogenic","Portable","Polarized","Reusable","Self-Tanning","Tinted","Travel Size","Waterproof","Wheeled","Scratch-Resistant"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"78aba0a00b3412827370aede724962dc":{"type":"string","example":["Plastic"],"can_have_multiple_values":true,"fieldname":"LensMaterial","key":"lens_material","recommended":false,"description":"The substances an optical lens is made out of."},"e6041e1b82f9e3ac106d984107d13504":{"type":"string","example":"Single Vision","can_have_multiple_values":false,"fieldname":"LensType","key":"lens_type","recommended":false,"description":"Whether the lens is single, multifocal, or tinted"},"937f3f40d16b2b5a23052e2d7311c6ff":{"type":"string","example":"Blue","can_have_multiple_values":false,"fieldname":"LensTint","key":"lens_tint","recommended":false,"description":"Color of lens tint."},"8b4897149a7b0cf1c4b79f6ca7c03881":{"type":"string","example":["Solid"],"can_have_multiple_values":true,"fieldname":"Keywords","key":"keywords","recommended":false,"description":"Keywords that might be used to search for this term, including synonyms and related terms."},"830b557ebbb8f05aa8d8e89c8073c9d8":{"type":"string","example":[{"name":"Pyrithione zinc","amount":2.5},{"name":"Salicylic Acid","amount":2}],"can_have_multiple_values":false,"fieldname":"IngredientsComposition","key":"ingredients_composition","recommended":false,"description":"The ingredients with the corresponding composition value"},"45f47b75dfc8dcab7bcc1b6895c572a0":{"type":"string","example":["Iron Oxide"],"can_have_multiple_values":true,"fieldname":"InactiveIngredients","key":"inactive_ingredients","recommended":false,"description":"Describes the list of inactive ingredients as shown on the item label."},"a416c6be2906ac2830fbd812fba3e591":{"type":"enum","example":"Full-Rim","can_have_multiple_values":false,"enum_values":["Full-Rim","Rimless","Semi-Rimless","Half-Rim"],"can_have_unknown_value":true,"fieldname":"EyewearRim","key":"eyewear_rim","recommended":false,"description":"Whether eyewear has rims, partial rims, or no rim at all."},"f4b8e7636597b2b532f6c75c8bd2a7a9":{"type":"string","example":["1 teaspoon every 6 hours"],"can_have_multiple_values":true,"fieldname":"Dosage","key":"dosage","recommended":false,"description":"The amount of a medication, drug, or supplement that is directed to be taken, or applied at one time or regularly during a period of time, as specified by the manufacturer."},"91455c53f237eb64c3de88f2c35b9556":{"type":"string","example":["Eyes","Face"],"can_have_multiple_values":true,"fieldname":"BodyPart","key":"body_part","recommended":false,"description":"Describes the particular body part(s) for which the item is intended."},"007e22a1352c2d2a1a443ba90e14b127":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"BatteriesRequired","key":"batteries_required","recommended":false,"description":"Indicates if batteries are required to use the product."},"052d7ff877183c9dcce5362a73e73428":{"type":"integer","example":400,"can_have_multiple_values":false,"fieldname":"UVRating","key":"u_v_rating","recommended":false,"description":"Ultraviolet rating for eyewear."},"3308f187f85aeefe4d6ed8fc5cd8e8e6":{"type":"enum","example":"Fair","can_have_multiple_values":false,"enum_values":["Fair","Light","Medium","Neutral","Olive","Dark"],"can_have_unknown_value":true,"fieldname":"SkinTone","key":"skin_tone","recommended":false,"description":"Describes the color or shade of skin that a product is targeted for. This is separate from Color Name of the product. \"Olive\" may be a color name from the manufacturer as well as the type of skin tone the product is targeting."},"9a04dccec14d02d689cf02fb757d1a10":{"type":"string","example":["Beeswax"],"can_have_multiple_values":true,"fieldname":"InactiveIngredients","key":"inactive_ingredients","recommended":false,"description":"Describes the list of inactive ingredients as shown on the item label."},"896fe12fa920abf8d338cef50e162628":{"type":"string","example":["Fever"],"can_have_multiple_values":true,"fieldname":"HealthConcern","key":"health_concern","recommended":false,"description":"Indicates if the item is meant to alleviate particular health issues, illnesses or life stages. For concerns specific to skin care, please use the Skin Care Concern attribute."},"3456eaf701f7278c2be139c78bcabd3f":{"type":"enum","example":["Coarse"],"can_have_multiple_values":true,"enum_values":["Coarse","Color Treated","Curly","Damaged","Dry","Fine","Oily"],"can_have_unknown_value":false,"fieldname":"HairType","key":"hair_type","recommended":false,"description":"Indicates the general hair types that the product is intended for relating to texture, coarseness, oiliness, thickness, and curliness."},"ce6ffae63aa69791f8881e7fb7c2bea8":{"type":"string","example":["Wash with warm water & soap"],"can_have_multiple_values":true,"fieldname":"CareInstructions","key":"care_instructions","recommended":false,"description":"Describes how the item should be cleaned, cared for or maintained."},"f7cdf1aaddb5d5cf96bdc35a3f9ba7c7":{"type":"string","example":"100% Hand-Tied","can_have_multiple_values":false,"fieldname":"WigCapType","key":"wig_cap_type","recommended":false,"description":"The construction style of the wig cap (also called the \"wig base\"), affecting the wig's appearance, durability, and styling options."},"16f4737bd60328d18f404968ba09f5de":{"type":"enum","example":["Automatic Shut Off"],"can_have_multiple_values":true,"enum_values":["Automatic Shut Off","Energy Star-Certified"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"ecb45e77061f56ea0bf5ab6280fd7b6d":{"type":"integer","example":1,"can_have_multiple_values":false,"fieldname":"NumberofLights","key":"numberof_lights","recommended":false,"description":"The number of lights or bulbs contained within a light or light fixture."},"884e05ecb296a36e8e63b1b2bd060fb9":{"type":"string","example":"Fluorescent","can_have_multiple_values":false,"fieldname":"LightBulbType","key":"light_bulb_type","recommended":false,"description":"The type of light bulb."},"0e8054ce0f52ba0d4105f9da4cbfcbfe":{"type":"measurement","example":"12 oz","enum_values":["ml","l","oz","cu_ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Capacity","key":"capacity","recommended":false,"description":"Indicates the maximum amount that the item can hold like pounds, liters or volume. Does not include Storage Capacity which is used for digital items."},"64b3fe664fa4c3666faae8b77a734631":{"type":"measurement","example":"12 oz","enum_values":["ml","l","oz","cu_ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Capacity","key":"capacity","recommended":true,"description":"Indicates the maximum amount that the item can hold like pounds, liters or volume. Does not include Storage Capacity which is used for digital items."},"7c421b8f435ae90ca36f71389bd6b9ca":{"type":"measurement","example":"10 g","enum_values":["mg","g","kg","oz","lb"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"ProductWeight","key":"product_weight","recommended":true,"description":"The weight of the fully assembled product."},"3eb15df7a5722992f9aa3dbf1a8c3923":{"type":"string","example":["Low Noise"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"049be88f7223ae9a349f4d47ec511389":{"type":"measurement","example":"220 V","enum_values":["V","KV"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Volts","key":"volts","recommended":false,"description":"The number of volts the product produces or requires. Also known as Voltage;"},"3aa26481e6a2737040dacf5844ff32f2":{"type":"enum","example":["Automatic Shut Off"],"can_have_multiple_values":true,"enum_values":["Automatic Shut Off","Energy Star-Certified","Bluetooth Compatible","Industrial","Remote Control Included","Wi-Fi Compatible"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"1b4aabae8670a6b5f8ad83a12c664b37":{"type":"string","example":44,"can_have_multiple_values":false,"fieldname":"SoundRating","key":"sound_rating","recommended":false,"description":"The sound decibel rating for the noise level of the appliance."},"43e44c783f17bdfc8772466174badee1":{"type":"string","example":["Amazon Alexa"],"can_have_multiple_values":true,"fieldname":"SmartHomeCompatibility","key":"smart_home_compatibility","recommended":false,"description":"The type of Smart Home devices that the product is compatible with."},"140a15b94c6d50aa103b176dc71951ff":{"type":"integer","example":2,"can_have_multiple_values":false,"fieldname":"NumberofDoors","key":"numberof_doors","recommended":false,"description":"The number of doors on the item."},"454fe2a0cbc9e12c03b9db3ccfe98a21":{"type":"integer","example":4,"can_have_multiple_values":false,"fieldname":"NumberofBurners","key":"numberof_burners","recommended":false,"description":"The number of cooking burners or elements."},"b771092e645e5a68eb3c34f590d4a028":{"type":"string","example":"Top Load","can_have_multiple_values":false,"fieldname":"LoadPosition","key":"load_position","recommended":false,"description":"The type of load position for washers & dryers."},"da1ff3922c1b46224c541ecf62c91f69":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsSet","key":"is_set","recommended":false,"description":"Indicates if the product is being sold as a set, like washer & dryer set."},"424a3c305eb21ffbd1257294397cc022":{"type":"string","example":"Electric","can_have_multiple_values":false,"fieldname":"FuelType","key":"fuel_type","recommended":false,"description":"The type of fuel used to power certain appliances."},"96481ec4bdef8e6fe8e5093ef39a68d0":{"type":"integer","example":10200,"can_have_multiple_values":false,"fieldname":"BTU","key":"b_t_u","recommended":false,"description":"The number of British Thermal Units for heating and cooling appliances."},"608d8c80b0c29120dd74b33b92b656f3":{"type":"measurement","example":"400 W","enum_values":["W","KW","MW","GW"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Watts","key":"watts","recommended":false,"description":"The number of watts the product procues or requires. Also known as Wattage."},"8f4a7d7221541f65cac8a79c08758bfb":{"type":"string","example":"Oil","can_have_multiple_values":false,"fieldname":"ProductForm","key":"product_form","recommended":true,"description":"The consistency, texture or formulation of the item and the way\n it will be consumed or dispensed."},"803d2a584a08f5944b306958fdb95a21":{"type":"string","example":["Vanilla"],"can_have_multiple_values":true,"fieldname":"Scent","key":"scent","recommended":true,"description":"The scent or fragrance of your item; including items\n labelled as \"unscented\""},"4e7d7d90f4137c48ce55a4b9a823eff2":{"type":"string","example":["some_string","other"],"can_have_multiple_values":true,"fieldname":"Ingredients","key":"ingredients","recommended":true,"description":"The list of all ingredients contained in an item, as found on the product label mandated by FDA guidelines."},"c8d76e2396b1577c1c9da0d9ec4cf770":{"type":"string","example":["Carpet"],"can_have_multiple_values":true,"fieldname":"RecommendedUse","key":"recommended_use","recommended":true,"description":"The recommended use\/surface of cleaning product."},"ec65783a5d3d73c90f83a5d59797ac73":{"type":"string","example":["Unscented"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"febfed4ca6efd5a645a1862390468384":{"type":"string","example":"Canister","can_have_multiple_values":false,"fieldname":"VacuumType","key":"vacuum_type","recommended":false,"description":"The type of vacuum cleaner."},"da6b491d82e229483b578dec94e4ff95":{"type":"enum","example":["Biodegradable"],"can_have_multiple_values":true,"enum_values":["Biodegradable","Recyclable"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"6cc94d5bc1810a51cf9b3139b629fd37":{"type":"integer","example":15,"can_have_multiple_values":false,"fieldname":"ShelfLife","key":"shelf_life","recommended":false,"description":"The length of time that the product can be stored without spoiling or losing quality, measured in days."},"23a063f0e0a0a294b129169b749639fa":{"type":"measurement","example":"12 oz","enum_values":["ml","l","oz","cu_ft"],"can_have_multiple_values":false,"can_have_unknown_value":false,"fieldname":"Capacity","key":"capacity","recommended":false,"description":"Indicates the maximum amount that the item can hold like pounds, liters or volume."},"b9bee7f2bace5f8065911d6998b34bad":{"type":"string","example":"Bag","can_have_multiple_values":false,"fieldname":"BagType","key":"bag_type","recommended":false,"description":"Indicates whether the vacuum cleaner is bag or bagless."},"07360c7815892f05de28ec9f92926612":{"type":"enum","example":["Chemical"],"can_have_multiple_values":true,"enum_values":["Chemical","Combustible","Flammable"],"can_have_unknown_value":false,"fieldname":"Warnings","key":"warnings","recommended":false,"description":"Warnings associated with the product."},"e6c000a4a5c024e4385c9e89ef1232c3":{"type":"integer","example":400,"can_have_multiple_values":false,"fieldname":"ThreadCount","key":"thread_count","recommended":true,"description":"The number of threads per square inch of fabric."},"2410d57d61f0e552896d9aca00f7b67b":{"type":"enum","example":["Water Resistant"],"can_have_multiple_values":true,"enum_values":["Reversible","Hypoallergenic","Stain Resistant","Water Resistant","Organic","Sustainably Sourced"],"can_have_unknown_value":false,"fieldname":"StandardFeatures","key":"standard_features","recommended":false,"description":"Standard features related to your item that might be important for buyers."},"c1a740062d17b6704080705c2474435c":{"type":"integer","example":3,"can_have_multiple_values":false,"fieldname":"PiecesInSet","key":"pieces_in_set","recommended":false,"description":"The number of items included in the set. If the item contains matching fitted sheets, flat sheets, and 2 pillowcases - the number is 4."},"0f4c1a53965b293c894d4b0e607b9770":{"type":"string","example":["Designer","Anti-Streak"],"can_have_multiple_values":true,"fieldname":"AdditionalFeatures","key":"additional_features","recommended":false,"description":"Additional features related to your item that might be important for buyers."},"4a6f34f51dbacff4a7033c14e600ce06":{"type":"boolean","example":"yes","can_have_multiple_values":false,"can_have_unknown_value":false,"enum_values":["yes","no"],"fieldname":"IsSet","key":"is_set","recommended":false,"description":"Indicates if the product contains 2 of more different items that are sold as part of a set."},"e8e50abdc6b50b497e7c90af199feeec":{"type":"integer","example":1,"can_have_multiple_values":false,"fieldname":"NumberOfLicenses","key":"number_of_licenses","recommended":true,"description":"The maximum number of users or installations allowed under the terms of the software licensing agreement."},"9c3c05234da77307c8b4fc50977ca324":{"type":"string","example":["Windows 7 or later"],"can_have_multiple_values":true,"fieldname":"SoftwareSystemRequirements","key":"software_system_requirements","recommended":true,"description":"The basic requirements necessary of any system in order to satisfactorily run the software."},"46c833eff8474794a70b21f9d2389e04":{"type":"string","example":"Antivirus & Security","can_have_multiple_values":false,"fieldname":"SoftwareCategory","key":"software_category","recommended":false,"description":"The general category of software to which the item is most closely associated with"},"1c4ef2904cadfca2cf53773ad85ce53d":{"type":"string","example":"7.2","can_have_multiple_values":false,"fieldname":"SoftwareVersion","key":"software_version","recommended":false,"description":"The version number assigned to this specific release of the software."}} \ No newline at end of file diff --git a/facebook-commerce-events-tracker.php b/facebook-commerce-events-tracker.php index 2af4c6fac..afc1d55b9 100644 --- a/facebook-commerce-events-tracker.php +++ b/facebook-commerce-events-tracker.php @@ -105,8 +105,10 @@ private function add_hooks() { add_action( 'woocommerce_after_single_product', array( $this, 'inject_view_content_event' ) ); add_action( 'woocommerce_after_single_product', array( $this, 'maybe_inject_search_event' ) ); + // ViewCategory events add_action( 'woocommerce_after_shop_loop', array( $this, 'inject_view_category_event' ) ); + // Search events add_action( 'pre_get_posts', array( $this, 'inject_search_event' ) ); add_filter( 'woocommerce_redirect_single_search_result', array( $this, 'maybe_add_product_search_event_to_session' ) ); @@ -122,23 +124,23 @@ private function add_hooks() { // InitiateCheckout events add_action( 'woocommerce_after_checkout_form', array( $this, 'inject_initiate_checkout_event' ) ); + // InitiateCheckout events for checkout block. add_action( 'woocommerce_blocks_checkout_enqueue_data', array( $this, 'inject_initiate_checkout_event' ) ); + // Purchase and Subscribe events - add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'inject_purchase_event' ) ); + add_action( 'woocommerce_new_order', array( $this, 'inject_purchase_event' ) ); + add_action( 'woocommerce_payment_complete', array( $this, 'inject_purchase_event' ), 10 ); + add_action( 'woocommerce_checkout_update_order_meta', array( $this, 'inject_purchase_event' ), 20 ); add_action( 'woocommerce_thankyou', array( $this, 'inject_purchase_event' ), 40 ); + add_action( 'woocommerce_order_status_processing', array( $this, 'inject_purchase_event' ), 50 ); + add_action( 'woocommerce_order_status_completed', array( $this, 'inject_purchase_event' ), 50 ); + add_action( 'woocommerce_process_shop_order_meta', array( $this, 'inject_purchase_event' ), 60 ); - // Checkout update order meta from the Checkout Block. - if ( version_compare( \Automattic\WooCommerce\Blocks\Package::get_version(), '7.2.0', '>=' ) ) { - add_action( 'woocommerce_store_api_checkout_update_order_meta', array( $this, 'inject_order_meta_event_for_checkout_block_flow' ), 10, 1 ); - } elseif ( version_compare( \Automattic\WooCommerce\Blocks\Package::get_version(), '6.3.0', '>=' ) ) { - add_action( 'woocommerce_blocks_checkout_update_order_meta', array( $this, 'inject_order_meta_event_for_checkout_block_flow' ), 10, 1 ); - } else { - add_action( '__experimental_woocommerce_blocks_checkout_update_order_meta', array( $this, 'inject_order_meta_event_for_checkout_block_flow' ), 10, 1 ); - } - - // TODO move this in some 3rd party plugin integrations handler at some point {FN 2020-03-20} + // Lead events through Contact Form 7 add_action( 'wpcf7_contact_form', array( $this, 'inject_lead_event_hook' ), 11 ); + + // Flush pending events on shutdown add_action( 'shutdown', array( $this, 'send_pending_events' ) ); } @@ -795,6 +797,8 @@ public function inject_initiate_checkout_event() { * * This may happen either when: * - WooCommerce signals a payment transaction complete (most gateways) + * - The order status is changed through the Woo dashboard to Processing or Completed + * - The Payment Completed event is fired, which happens in case of some external payment gateways. * - Customer reaches Thank You page skipping payment (for gateways that do not require payment, e.g. Cheque, BACS, Cash on delivery...) * * The method checks if the event was not triggered already avoiding a duplicate. @@ -808,7 +812,9 @@ public function inject_purchase_event( $order_id ) { $event_name = 'Purchase'; - if ( ! $this->is_pixel_enabled() || $this->pixel->is_last_event( $event_name ) ) { + $valid_purchase_order_states = array( 'processing', 'completed' ); + + if ( ! $this->is_pixel_enabled() ) { return; } @@ -817,23 +823,26 @@ public function inject_purchase_event( $order_id ) { if ( ! $order ) { return; } + + // Get the status of the order to ensure we track the actual purchases and not the ones that have a failed payment. + $order_state = $order->get_status(); - // use a session flag to ensure an order is tracked with any payment method, also when the order is placed through AJAX - $order_placed_flag = '_wc_' . facebook_for_woocommerce()->get_id() . '_order_placed_' . $order_id; - - // use a session flag to ensure a Purchase event is not tracked multiple times + // use a session flag to ensure this Purchase event is not tracked multiple times $purchase_tracked_flag = '_wc_' . facebook_for_woocommerce()->get_id() . '_purchase_tracked_' . $order_id; - // when saving the order meta data: add a flag to mark the order tracked - if ( 'woocommerce_checkout_update_order_meta' === current_action() ) { - set_transient( $order_placed_flag, 'yes', 15 * MINUTE_IN_SECONDS ); + // Return if this Purchase event has already been tracked + if ( 'yes' === get_transient( $purchase_tracked_flag ) || $order->meta_exists( '_meta_purchase_tracked' ) || ! in_array( $order_state, $valid_purchase_order_states ) ) { return; } - // bail if by the time we are on the thank you page the meta has not been set or we already tracked a Purchase event - if ( 'yes' !== get_transient( $order_placed_flag ) || 'yes' === get_transient( $purchase_tracked_flag ) ) { - return; - } + // Mark the order as tracked for the session + set_transient( $purchase_tracked_flag, 'yes', 15 * MINUTE_IN_SECONDS ); + + // Set a flag to ensure this Purchase event is not going to be sent across different sessions + $order->add_meta_data( '_meta_purchase_tracked', true, true ); + + // Save the metadata + $order->save(); $content_type = 'product'; $contents = array(); @@ -885,41 +894,6 @@ public function inject_purchase_event( $order_id ) { $this->inject_subscribe_event( $order_id ); - // mark the order as tracked - set_transient( $purchase_tracked_flag, 'yes', 15 * MINUTE_IN_SECONDS ); - - } - - /** - * Inject order meta gor WooCommerce Checkout Blocks flow. - * The blocks flow does not trigger the woocommerce_checkout_update_order_meta so we can't rely on it. - * The Checkout Block has its own hook that allows us to inject the meta at - * the appropriate moment: woocommerce_store_api_checkout_update_order_meta. - * - * Note: __experimental_woocommerce_blocks_checkout_update_order_meta has been deprecated - * as of WooCommerce Blocks 6.3.0 - * - * @since 2.6.6 - * - * @param WC_Order|int $the_order Order object or id. - */ - public function inject_order_meta_event_for_checkout_block_flow( $the_order ) { - - $event_name = 'Purchase'; - - if ( ! $this->is_pixel_enabled() || $this->pixel->is_last_event( $event_name ) ) { - return; - } - - $order = wc_get_order($the_order); - - if ( ! $order ) { - return; - } - - $order_placed_flag = '_wc_' . facebook_for_woocommerce()->get_id() . '_order_placed_' . $order->get_id(); - set_transient( $order_placed_flag, 'yes', 15 * MINUTE_IN_SECONDS ); - } diff --git a/facebook-commerce.php b/facebook-commerce.php index 7b5290bec..be88640c3 100644 --- a/facebook-commerce.php +++ b/facebook-commerce.php @@ -95,12 +95,6 @@ class WC_Facebookcommerce_Integration extends WC_Integration { /** @var string request headers in the debug log */ const SETTING_REQUEST_HEADERS_IN_DEBUG_MODE = 'wc_facebook_request_headers_in_debug_log'; - /** @var string the standard product description mode name */ - const PRODUCT_DESCRIPTION_MODE_STANDARD = 'standard'; - - /** @var string the short product description mode name */ - const PRODUCT_DESCRIPTION_MODE_SHORT = 'short'; - /** @var string custom taxonomy Facebook Product Set ID */ const FB_PRODUCT_SET_ID = 'fb_product_set_id'; @@ -811,9 +805,6 @@ public function on_product_save( int $wp_id ) { $this->save_product_settings( $product ); } else { // if previously enabled, add a notice on the next page load - if ( Products::is_sync_enabled_for_product( $product ) ) { - Admin::add_product_disabled_sync_notice(); - } Products::disable_sync_for_products( [ $product ] ); if ( in_array( $wp_id, $products_to_delete_from_facebook, true ) ) { $this->delete_fb_product( $product ); @@ -2504,36 +2495,6 @@ public function get_excluded_product_tag_ids() { return (array) apply_filters( 'wc_facebook_excluded_product_tag_ids', get_option( self::SETTING_EXCLUDED_PRODUCT_TAG_IDS, [] ), $this ); } - /** - * Gets the configured product description mode. - * - * @since 1.10.0 - * - * @return string - */ - public function get_product_description_mode() { - /** - * Filters the configured product description mode. - * - * @since 1.10.0 - * - * @param string $mode the configured product description mode - * @param \WC_Facebookcommerce_Integration $integration the integration instance - */ - $mode = (string) apply_filters( 'wc_facebook_product_description_mode', get_option( self::SETTING_PRODUCT_DESCRIPTION_MODE, self::PRODUCT_DESCRIPTION_MODE_STANDARD ), $this ); - - $valid_modes = [ - self::PRODUCT_DESCRIPTION_MODE_STANDARD, - self::PRODUCT_DESCRIPTION_MODE_SHORT, - ]; - - if ( ! in_array( $mode, $valid_modes, true ) ) { - $mode = self::PRODUCT_DESCRIPTION_MODE_STANDARD; - } - - return $mode; - } - /** Setter methods ************************************************************************************************/ @@ -3006,17 +2967,22 @@ public function get_product_fbid( string $fbid_type, int $wp_id, $woo_product = $fb_retailer_id = WC_Facebookcommerce_Utils::get_fb_retailer_id( $woo_product ); try { - $facebook_ids = $this->facebook_for_woocommerce->get_api()->get_product_facebook_ids( + $response = $this->facebook_for_woocommerce->get_api()->get_product_facebook_ids( $this->get_product_catalog_id(), $fb_retailer_id ); - if ( $facebook_ids->id ) { + if ( $response->data && $response->data[0] && $response->data[0]['id'] ) { $fb_id = $fbid_type == self::FB_PRODUCT_GROUP_ID - ? $facebook_ids->get_facebook_product_group_id() - : $facebook_ids->id; + ? $response->data[0]['product_group']['id'] + : $response->data[0]['id']; + update_post_meta( $wp_id, $fbid_type, $fb_id ); + return $fb_id; + } elseif ( $response->id ) { + $fb_id = $fbid_type == self::FB_PRODUCT_GROUP_ID + ? $response->get_facebook_product_group_id() + : $response->id; update_post_meta( $wp_id, $fbid_type, $fb_id ); - return $fb_id; } } catch ( Exception $e ) { diff --git a/facebook-for-woocommerce.php b/facebook-for-woocommerce.php index d5b212536..e6a38ca23 100644 --- a/facebook-for-woocommerce.php +++ b/facebook-for-woocommerce.php @@ -10,7 +10,7 @@ * Description: Grow your business on Facebook! Use this official plugin to help sell more of your products using Facebook. After completing the setup, you'll be ready to create ads that promote your products and you can also create a shop section on your Page where customers can browse your products on Facebook. * Author: Facebook * Author URI: https://www.facebook.com/ - * Version: 3.4.6 + * Version: 3.4.7 * Requires at least: 5.6 * Requires PHP: 7.4 * Text Domain: facebook-for-woocommerce @@ -48,7 +48,7 @@ class WC_Facebook_Loader { /** * @var string the plugin version. This must be in the main plugin file to be automatically bumped by Woorelease. */ - const PLUGIN_VERSION = '3.4.6'; // WRCS: DEFINED_VERSION. + const PLUGIN_VERSION = '3.4.7'; // WRCS: DEFINED_VERSION. // Minimum PHP version required by this plugin. const MINIMUM_PHP_VERSION = '7.4.0'; diff --git a/includes/API/FBE/Configuration/Read/Response.php b/includes/API/FBE/Configuration/Read/Response.php index 76b7a617d..40d2ea9fb 100644 --- a/includes/API/FBE/Configuration/Read/Response.php +++ b/includes/API/FBE/Configuration/Read/Response.php @@ -18,6 +18,10 @@ class Response extends API\Response { * @return boolean */ public function is_ig_shopping_enabled(): bool { + + if ( empty( $this->response_data['ig_shopping'] ) ) { + return false; + } return (bool) $this->response_data['ig_shopping']['enabled'] ?? false; } @@ -27,6 +31,23 @@ public function is_ig_shopping_enabled(): bool { * @return boolean */ public function is_ig_cta_enabled(): bool { - return (bool) $this->response_data['ig_cta']['enabled']; + + if ( empty( $this->response_data['ig_cta'] ) ) { + return false; + } + return (bool) $this->response_data['ig_cta']['enabled'] ?? false; + } + + /** + * Gets the commerce extension URI. + * + * @return string Commerce extension URI or empty string if not available. + */ + public function get_commerce_extension_uri(): string { + + if ( empty( $this->response_data['commerce_extension'] ) ) { + return ''; + } + return $this->response_data['commerce_extension']['uri'] ?? ''; } } diff --git a/includes/API/ProductCatalog/Products/Id/Request.php b/includes/API/ProductCatalog/Products/Id/Request.php index 60436be05..af39f78de 100644 --- a/includes/API/ProductCatalog/Products/Id/Request.php +++ b/includes/API/ProductCatalog/Products/Id/Request.php @@ -8,9 +8,9 @@ defined( 'ABSPATH' ) || exit; /** - * Request object for Product Catalog > Product Groups > Products > Update Graph Api. + * Request object for Product Catalog > Products > Get Graph Api. * - * @link https://developers.facebook.com/docs/marketing-api/reference/product-group/products/ + * @link https://developers.facebook.com/docs/marketing-api/reference/product-catalog/products/ */ class Request extends ApiRequest { @@ -19,7 +19,18 @@ class Request extends ApiRequest { * @param string $facebook_product_retailer_id Facebook Product Retailer ID. */ public function __construct( string $facebook_product_catalog_id, string $facebook_product_retailer_id ) { - $path = "catalog:{$facebook_product_catalog_id}:" . base64_encode( $facebook_product_retailer_id ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode - parent::__construct( "/{$path}/?fields=id,product_group{id}", 'GET' ); + + /** + * We use the endpoint with filter to get the product id and group id for new products to check if the product is already synced to Facebook. + */ + $path = "/{$facebook_product_catalog_id}/products"; + parent::__construct( $path, 'GET' ); + + $this->set_params( + array( + 'filter' => '{"retailer_id":{"eq":"' . $facebook_product_retailer_id . '"}}', + 'fields' => 'id,product_group{id}', + ) + ); } } diff --git a/includes/API/ProductCatalog/Products/Id/Response.php b/includes/API/ProductCatalog/Products/Id/Response.php index e12c123cb..e4570b8d2 100644 --- a/includes/API/ProductCatalog/Products/Id/Response.php +++ b/includes/API/ProductCatalog/Products/Id/Response.php @@ -10,7 +10,7 @@ /** * Response object for Product Catalog > Product Groups > Update Graph Api. * - * @link https://developers.facebook.com/docs/marketing-api/reference/product-group/products/ + * @link https://developers.facebook.com/docs/marketing-api/reference/product-catalog/products/ * @property-read string id Either request was successful or not. * @property-read array product_group Product group data container containing facebook product group id * e.g. product_group => [ id => ] diff --git a/includes/Admin.php b/includes/Admin.php index 1b8367d62..92ef597ff 100644 --- a/includes/Admin.php +++ b/includes/Admin.php @@ -33,6 +33,18 @@ class Admin { /** @var string the "sync disabled" sync mode slug */ const SYNC_MODE_SYNC_DISABLED = 'sync_disabled'; + /** @var string the "fb_sync_enabled" sync mode slug */ + const INCLUDE_FACEBOOK_SYNC = 'fb_sync_enabled'; + + /** @var string the "fb_sync_disabled" sync mode slug */ + const EXCLUDE_FACEBOOK_SYNC = 'fb_sync_disabled'; + + /** @var string the "include" sync mode for bulk edit */ + const BULK_EDIT_SYNC = 'bulk_edit_sync'; + + /** @var string the "exclude" sync mode for bulk edit */ + const BULK_EDIT_DELETE = 'bulk_edit_delete'; + /** @var Product_Categories the product category admin handler */ protected $product_categories; @@ -94,8 +106,8 @@ public function __construct() { add_filter( 'request', array( $this, 'filter_products_by_sync_enabled' ) ); // add bulk actions to manage products sync - add_filter( 'bulk_actions-edit-product', array( $this, 'add_products_sync_bulk_actions' ), 40 ); - add_action( 'handle_bulk_actions-edit-product', array( $this, 'handle_products_sync_bulk_actions' ) ); + add_action( 'woocommerce_product_bulk_edit_end', array( $this, 'add_facebook_sync_bulk_edit_dropdown_at_bottom' ) ); + add_action( 'woocommerce_product_bulk_edit_save', array( $this, 'handle_products_sync_bulk_actions' ), 10, 1 ); // add Product data tab add_filter( 'woocommerce_product_data_tabs', array( $this, 'add_product_settings_tab' ) ); @@ -438,7 +450,7 @@ public function get_product_categories_handler() { * @return array */ public function add_product_list_table_columns( $columns ) { - $columns['facebook_sync'] = __( 'Facebook sync', 'facebook-for-woocommerce' ); + $columns['facebook_sync'] = __( 'Synced to Meta catalog', 'facebook-for-woocommerce' ); return $columns; } @@ -472,13 +484,9 @@ public function add_product_list_table_columns_content( $column ) { } if ( $should_sync ) { - if ( Products::is_product_visible( $product ) ) { - esc_html_e( 'Sync and show', 'facebook-for-woocommerce' ); - } else { - esc_html_e( 'Sync and hide', 'facebook-for-woocommerce' ); - } + esc_html_e( 'Synced', 'facebook-for-woocommerce' ); } else { - esc_html_e( 'Do not sync', 'facebook-for-woocommerce' ); + esc_html_e( 'Not synced', 'facebook-for-woocommerce' ); if ( ! empty( $no_sync_reason ) ) { echo wc_help_tip( $no_sync_reason ); } @@ -503,14 +511,43 @@ public function add_products_by_sync_enabled_input_filter() { $choice = isset( $_GET['fb_sync_enabled'] ) ? (string) sanitize_text_field( wp_unslash( $_GET['fb_sync_enabled'] ) ) : ''; ?> + + as query happens on WP products, + * Reason: We need to check if a product has variation and if they are synced or not + * Future plans: When product level sync comes through this should be handled more gracefully as we will only check at product level + * */ // when checking for products with sync enabled we need to check both "yes" and meta not set, this requires adding an "OR" clause $query_vars = $this->add_query_vars_to_find_products_with_sync_enabled( $query_vars ); - // only get visible products (both "yes" and meta not set) - $query_vars = $this->add_query_vars_to_find_visible_products( $query_vars ); // since we record enabled status and visibility on child variations, we need to query variable products found for their children to exclude them from query results $exclude_products = []; $found_ids = get_posts( array_merge( $query_vars, array( 'fields' => 'ids' ) ) ); @@ -558,8 +598,7 @@ public function filter_products_by_sync_enabled( $query_vars ) { ); /** @var \WC_Product[] $found_products */ foreach ( $found_products as $product ) { - if ( ! Products::is_sync_enabled_for_product( $product ) - || ! Products::is_product_visible( $product ) ) { + if ( ! Products::is_sync_enabled_for_product( $product ) ) { $exclude_products[] = $product->get_id(); } } @@ -571,38 +610,18 @@ public function filter_products_by_sync_enabled( $query_vars ) { $query_vars['post__not_in'] = $exclude_products; } } - } elseif ( self::SYNC_MODE_SYNC_AND_HIDE === $filter_value ) { - // when checking for products with sync enabled we need to check both "yes" and meta not set, this requires adding an "OR" clause - $query_vars = $this->add_query_vars_to_find_products_with_sync_enabled( $query_vars ); - // only get hidden products - $query_vars = $this->add_query_vars_to_find_hidden_products( $query_vars ); - // since we record enabled status and visibility on child variations, we need to query variable products found for their children to exclude them from query results - $exclude_products = []; - $found_ids = get_posts( array_merge( $query_vars, array( 'fields' => 'ids' ) ) ); - $found_products = empty( $found_ids ) ? [] : wc_get_products( - array( - 'limit' => -1, - 'type' => 'variable', - 'include' => $found_ids, - ) - ); - /** @var \WC_Product[] $found_products */ - foreach ( $found_products as $product ) { - if ( ! Products::is_sync_enabled_for_product( $product ) - || Products::is_product_visible( $product ) ) { - $exclude_products[] = $product->get_id(); - } - } - if ( ! empty( $exclude_products ) ) { - if ( ! empty( $query_vars['post__not_in'] ) ) { - $query_vars['post__not_in'] = array_merge( $query_vars['post__not_in'], $exclude_products ); - } else { - $query_vars['post__not_in'] = $exclude_products; - } - } - - // for the same reason, we also need to include variable products with hidden children + /** + * Now removing all `Not Synced` products from the found products + * Reason: This is required even if we have mentioned $query_vars['post__not_in'], + * the preference of $query_vars['post__in'] is higher and will be overriden + * at the end of this function. + * */ + $found_ids = array_diff( $found_ids, $exclude_products ); + + /** + * For the same reason, we also need to include variable products with hidden children + * */ $include_products = []; $hidden_variations = get_posts( array( @@ -619,13 +638,12 @@ public function filter_products_by_sync_enabled( $query_vars ) { foreach ( $hidden_variations as $variation_post ) { $variable_product = wc_get_product( $variation_post->post_parent ); // we need this check because we only want products with ALL variations hidden - if ( $variable_product instanceof \WC_Product && Products::is_sync_enabled_for_product( $variable_product ) - && ! Products::is_product_visible( $variable_product ) ) { + if ( $variable_product instanceof \WC_Product && Products::is_sync_enabled_for_product( $variable_product ) ) { $include_products[] = $variable_product->get_id(); } } } else { - // self::SYNC_MODE_SYNC_DISABLED + // self::EXCLUDE_FACEBOOK_SYNC // products to be included in the QUERY, not in the sync $include_products = []; $found_ids = []; @@ -785,72 +803,6 @@ private function maybe_add_tax_query_for_excluded_taxonomies( $query_vars, $in = return $query_vars; } - - /** - * Adds query vars to limit the results to visible products. - * - * @since 2.0.0 - * - * @param array $query_vars - * @return array - */ - private function add_query_vars_to_find_visible_products( array $query_vars ) { - $visibility_meta_query = array( - 'relation' => 'OR', - array( - 'key' => Products::VISIBILITY_META_KEY, - 'value' => 'yes', - ), - array( - 'key' => Products::VISIBILITY_META_KEY, - 'compare' => 'NOT EXISTS', - ), - ); - - if ( empty( $query_vars['meta_query'] ) ) { - $query_vars['meta_query'] = $visibility_meta_query; - } elseif ( is_array( $query_vars['meta_query'] ) ) { - $enabled_meta_query = $query_vars['meta_query']; - $query_vars['meta_query'] = array( - 'relation' => 'AND', - $enabled_meta_query, - $visibility_meta_query, - ); - } - - return $query_vars; - } - - - /** - * Adds query vars to limit the results to hidden products. - * - * @since 2.0.0 - * - * @param array $query_vars - * @return array - */ - private function add_query_vars_to_find_hidden_products( array $query_vars ) { - $visibility_meta_query = array( - 'key' => Products::VISIBILITY_META_KEY, - 'value' => 'no', - ); - - if ( empty( $query_vars['meta_query'] ) ) { - $query_vars['meta_query'] = $visibility_meta_query; - } elseif ( is_array( $query_vars['meta_query'] ) ) { - $enabled_meta_query = $query_vars['meta_query']; - $query_vars['meta_query'] = array( - 'relation' => 'AND', - $enabled_meta_query, - $visibility_meta_query, - ); - } - - return $query_vars; - } - - /** * Adds bulk actions in the products edit screen. * @@ -870,95 +822,78 @@ public function add_products_sync_bulk_actions( $bulk_actions ) { /** * Handles a Facebook product sync bulk action. + * Called every time for a product * * @internal * - * @since 1.10.0 - * - * @param string $redirect admin URL used by WordPress to redirect after performing the bulk action - * @return string + * @param string $product_edit the product metadata that is being edited. */ - public function handle_products_sync_bulk_actions( $redirect ) { - - // primary dropdown at the top of the list table - // phpcs:ignore WordPress.Security.NonceVerification.Recommended - $action = isset( $_REQUEST['action'] ) && -1 !== (int) $_REQUEST['action'] ? sanitize_text_field( wp_unslash( $_REQUEST['action'] ) ) : null; - - // secondary dropdown at the bottom of the list table - if ( ! $action ) { - // phpcs:ignore WordPress.Security.NonceVerification.Recommended - $action = isset( $_REQUEST['action2'] ) && -1 !== (int) $_REQUEST['action2'] ? sanitize_text_field( wp_unslash( $_REQUEST['action2'] ) ) : null; - } - - if ( $action && in_array( $action, array( 'facebook_include', 'facebook_exclude' ), true ) ) { - $products = []; - // phpcs:ignore WordPress.Security.NonceVerification.Recommended - $product_ids = isset( $_REQUEST['post'] ) && is_array( $_REQUEST['post'] ) ? array_map( 'absint', $_REQUEST['post'] ) : []; - if ( ! empty( $product_ids ) ) { - /** @var \WC_Product[] $enabling_sync_virtual_products virtual products that are being included */ - $enabling_sync_virtual_products = []; - /** @var \WC_Product_Variation[] $enabling_sync_virtual_variations virtual variations that are being included */ - $enabling_sync_virtual_variations = []; - foreach ( $product_ids as $product_id ) { - if ( $product = wc_get_product( $product_id ) ) { - $products[] = $product; - if ( 'facebook_include' === $action ) { - if ( $product->is_virtual() && ! Products::is_sync_enabled_for_product( $product ) ) { - $enabling_sync_virtual_products[ $product->get_id() ] = $product; - } elseif ( $product->is_type( 'variable' ) ) { - // collect the virtual variations - foreach ( $product->get_children() as $variation_id ) { - $variation = wc_get_product( $variation_id ); - if ( $variation && $variation->is_virtual() && ! Products::is_sync_enabled_for_product( $variation ) ) { - $enabling_sync_virtual_products[ $product->get_id() ] = $product; - $enabling_sync_virtual_variations[ $variation->get_id() ] = $variation; - } - } - }//end if - }//end if + public function handle_products_sync_bulk_actions( $product_edit ) { + + $sync_mode = isset( $_GET['facebook_bulk_sync_options'] ) ? (string) sanitize_text_field( wp_unslash( $_GET['facebook_bulk_sync_options'] ) ) : null; + + if ( $sync_mode ) { + /** @var \WC_Product[] $enabling_sync_virtual_products virtual products that are being included */ + $enabling_sync_virtual_products = []; + /** @var \WC_Product_Variation[] $enabling_sync_virtual_variations virtual variations that are being included */ + $enabling_sync_virtual_variations = []; + /** @var \WC_Product $product to store the product meta data */ + $product = wc_get_product( $product_edit ); + + if ( $product && $this::BULK_EDIT_SYNC === $sync_mode ) { + if ( $product->is_virtual() && ! Products::is_sync_enabled_for_product( $product ) ) { + $enabling_sync_virtual_products[ $product->get_id() ] = $product; + } elseif ( $product->is_type( 'variable' ) ) { + // collect the virtual variations + foreach ( $product->get_children() as $variation_id ) { + $variation = wc_get_product( $variation_id ); + if ( $variation && $variation->is_virtual() && ! Products::is_sync_enabled_for_product( $variation ) ) { + $enabling_sync_virtual_variations[ $variation->get_id() ] = $variation; + } + }//end foreach + if ( ! empty( $enabling_sync_virtual_variations ) ) { + $enabling_sync_virtual_products[ $product->get_id() ] = $product; }//end if - }//end foreach + }//end if + }//end if - if ( ! empty( $enabling_sync_virtual_products ) || ! empty( $enabling_sync_virtual_variations ) ) { - // display notice if enabling sync for virtual products or variations - set_transient( 'wc_' . facebook_for_woocommerce()->get_id() . '_enabling_virtual_products_sync_show_notice_' . get_current_user_id(), true, 15 * MINUTE_IN_SECONDS ); - set_transient( 'wc_' . facebook_for_woocommerce()->get_id() . '_enabling_virtual_products_sync_affected_products_' . get_current_user_id(), array_keys( $enabling_sync_virtual_products ), 15 * MINUTE_IN_SECONDS ); + if ( ! empty( $enabling_sync_virtual_products ) || ! empty( $enabling_sync_virtual_variations ) ) { + // display notice if enabling sync for virtual products or variations + set_transient( 'wc_' . facebook_for_woocommerce()->get_id() . '_enabling_virtual_products_sync_show_notice_' . get_current_user_id(), true, 15 * MINUTE_IN_SECONDS ); + set_transient( 'wc_' . facebook_for_woocommerce()->get_id() . '_enabling_virtual_products_sync_affected_products_' . get_current_user_id(), array_keys( $enabling_sync_virtual_products ), 15 * MINUTE_IN_SECONDS ); - // set visibility for virtual products - foreach ( $enabling_sync_virtual_products as $product ) { + // set visibility for virtual products + foreach ( $enabling_sync_virtual_products as $product ) { - // do not set visibility for variable products - if ( ! $product->is_type( 'variable' ) ) { - Products::set_product_visibility( $product, false ); - } + // do not set visibility for variable products + if ( ! $product->is_type( 'variable' ) ) { + Products::set_product_visibility( $product, false ); } + } - // set visibility for virtual variations - foreach ( $enabling_sync_virtual_variations as $variation ) { + // set visibility for virtual variations + foreach ( $enabling_sync_virtual_variations as $variation ) { - Products::set_product_visibility( $variation, false ); - } - }//end if + Products::set_product_visibility( $variation, false ); + } + }//end if - if ( 'facebook_include' === $action ) { + $products[] = $product; - Products::enable_sync_for_products( $products ); + if ( $this::BULK_EDIT_SYNC === $sync_mode ) { - $this->resync_products( $products ); + Products::enable_sync_for_products( $products ); - } elseif ( 'facebook_exclude' === $action ) { + $this->resync_products( $products ); - Products::disable_sync_for_products( $products ); + } elseif ( $this::BULK_EDIT_DELETE === $sync_mode ) { - self::add_product_disabled_sync_notice( count( $products ) ); - } - }//end if - }//end if + Products::disable_sync_for_products( $products ); - return $redirect; + } + } //end if } - /** * Re-syncs the given products. * @@ -990,22 +925,6 @@ private function resync_products( array $products ) { } } - - /** - * Adds a transient so an informational notice is displayed on the next page load. - * - * @since 2.0.0 - * - * @param int $count number of products - */ - public static function add_product_disabled_sync_notice( $count = 1 ) { - - if ( ! facebook_for_woocommerce()->get_admin_notice_handler()->is_notice_dismissed( 'wc-' . facebook_for_woocommerce()->get_id_dasherized() . '-product-disabled-sync' ) ) { - set_transient( 'wc_' . facebook_for_woocommerce()->get_id() . '_show_product_disabled_sync_notice_' . get_current_user_id(), $count, MINUTE_IN_SECONDS ); - } - } - - /** * Adds a message for after a product or set of products get excluded from sync. * @@ -1383,6 +1302,7 @@ public function add_product_settings_tab_content() { 'value' => $fb_mpn, 'class' => 'enable-if-sync-enabled', 'desc_tip' => true, + 'description' => __( 'Manufacturer Part Number (MPN) of the item', 'facebook-for-woocommerce' ), ) ); @@ -1653,7 +1573,7 @@ public function add_product_variation_edit_fields( $index, $variation_data, $pos 'label' => __( 'Manufacturer Parts Number (MPN)', 'facebook-for-woocommerce' ), 'desc_tip' => true, 'description' => __( 'Manufacturer Parts Number', 'facebook-for-woocommerce' ), - 'value' => wc_format_decimal( $fb_mpn ), + 'value' => $fb_mpn, 'class' => 'enable-if-sync-enabled', 'wrapper_class' => 'form-row form-full', ) @@ -1742,7 +1662,7 @@ public function save_product_variation_edit_fields( $variation_id, $index ) { $posted_param = 'variable_' . \WC_Facebook_Product::FB_PRODUCT_IMAGE; $image_url = isset( $_POST[ $posted_param ][ $index ] ) ? esc_url_raw( wp_unslash( $_POST[ $posted_param ][ $index ] ) ) : null; $posted_param = 'variable_' . \WC_Facebook_Product::FB_PRODUCT_CONDITION; - $image_url = isset( $_POST[ $posted_param ][ $index ] ) ? esc_url_raw( wp_unslash( $_POST[ $posted_param ][ $index ] ) ) : null; + $condition = isset( $_POST[ $posted_param ][ $index ] ) ? esc_url_raw( wp_unslash( $_POST[ $posted_param ][ $index ] ) ) : null; $posted_param = 'variable_' . \WC_Facebook_Product::FB_PRODUCT_VIDEO; $video_urls = isset( $_POST[ $posted_param ][ $index ] ) ? esc_url_raw( wp_unslash( $_POST[ $posted_param ][ $index ] ) ) : []; $posted_param = 'variable_' . \WC_Facebook_Product::FB_PRODUCT_PRICE; @@ -1752,6 +1672,7 @@ public function save_product_variation_edit_fields( $variation_id, $index ) { $variation->update_meta_data( Products::PRODUCT_IMAGE_SOURCE_META_KEY, $image_source ); $variation->update_meta_data( \WC_Facebook_Product::FB_MPN, $fb_mpn ); $variation->update_meta_data( \WC_Facebook_Product::FB_PRODUCT_IMAGE, $image_url ); + $variation->update_meta_data( \WC_Facebook_Product::FB_PRODUCT_CONDITION, $condition ); $variation->update_meta_data( \WC_Facebook_Product::FB_PRODUCT_VIDEO, $video_urls ); $variation->update_meta_data( \WC_Facebook_Product::FB_PRODUCT_PRICE, $price ); $variation->save_meta_data(); diff --git a/includes/Admin/Settings_Screens/Product_Sync.php b/includes/Admin/Settings_Screens/Product_Sync.php index 8dc50e3fb..9efcc65ef 100644 --- a/includes/Admin/Settings_Screens/Product_Sync.php +++ b/includes/Admin/Settings_Screens/Product_Sync.php @@ -304,18 +304,6 @@ public function get_settings() { ), ), - array( - 'id' => \WC_Facebookcommerce_Integration::SETTING_PRODUCT_DESCRIPTION_MODE, - 'title' => __( 'Product description sync', 'facebook-for-woocommerce' ), - 'type' => 'select', - 'class' => 'product-sync-field', - 'desc_tip' => __( 'Choose which product description to display in the Facebook catalog.', 'facebook-for-woocommerce' ), - 'default' => \WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_STANDARD, - 'options' => array( - \WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_STANDARD => __( 'Standard description', 'facebook-for-woocommerce' ), - \WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT => __( 'Short description', 'facebook-for-woocommerce' ), - ), - ), array( 'id' => Commerce::OPTION_GOOGLE_PRODUCT_CATEGORY_ID, 'type' => 'product_sync_google_product_categories', diff --git a/includes/Events/AAMSettings.php b/includes/Events/AAMSettings.php index 58cee4346..817624e4d 100644 --- a/includes/Events/AAMSettings.php +++ b/includes/Events/AAMSettings.php @@ -160,7 +160,7 @@ public function set_pixel_id( $pixel_id ) { * @return string */ public function __toString() { - return json_encode( + return wp_json_encode( array( 'enableAutomaticMatching' => $this->enable_automatic_matching, 'enabledAutomaticMatchingFields' => $this->enabled_automatic_matching_fields, diff --git a/includes/Lifecycle.php b/includes/Lifecycle.php index 297774cdc..ed490e14d 100644 --- a/includes/Lifecycle.php +++ b/includes/Lifecycle.php @@ -149,10 +149,6 @@ private function migrate_1_9_settings() { $new_settings[ \WC_Facebookcommerce_Integration::SETTING_ENABLE_PRODUCT_SYNC ] = $product_sync_enabled ? 'yes' : 'no'; } - if ( ! isset( $new_settings[ \WC_Facebookcommerce_Integration::SETTING_PRODUCT_DESCRIPTION_MODE ] ) ) { - $new_settings[ \WC_Facebookcommerce_Integration::SETTING_PRODUCT_DESCRIPTION_MODE ] = ! empty( get_option( 'fb_sync_short_description', 0 ) ) ? \WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT : \WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_STANDARD; - } - if ( ! isset( $new_settings[ \WC_Facebookcommerce_Integration::SETTING_SCHEDULED_RESYNC_OFFSET ] ) ) { $autosync_time = get_option( 'woocommerce_fb_autosync_time' ); $parsed_time = ! empty( $autosync_time ) ? strtotime( $autosync_time ) : false; @@ -219,7 +215,6 @@ protected function upgrade_to_2_0_0() { 'enable_product_sync' => \WC_Facebookcommerce_Integration::SETTING_ENABLE_PRODUCT_SYNC, 'excluded_product_category_ids' => \WC_Facebookcommerce_Integration::SETTING_EXCLUDED_PRODUCT_CATEGORY_IDS, 'excluded_product_tag_ids' => \WC_Facebookcommerce_Integration::SETTING_EXCLUDED_PRODUCT_TAG_IDS, - 'product_description_mode' => \WC_Facebookcommerce_Integration::SETTING_PRODUCT_DESCRIPTION_MODE, 'enable_messenger' => self::SETTING_ENABLE_MESSENGER, 'messenger_locale' => self::SETTING_MESSENGER_LOCALE, 'messenger_greeting' => self::SETTING_MESSENGER_GREETING, diff --git a/includes/ProductSync/ProductValidator.php b/includes/ProductSync/ProductValidator.php index 8ac8d9f56..06655fa9b 100644 --- a/includes/ProductSync/ProductValidator.php +++ b/includes/ProductSync/ProductValidator.php @@ -28,20 +28,6 @@ class ProductValidator { */ public const SYNC_ENABLED_META_KEY = '_wc_facebook_sync_enabled'; - /** - * Maximum length of product description. - * - * @var int - */ - public const MAX_DESCRIPTION_LENGTH = 5000; - - /** - * Maximum length of product title. - * - * @var int - */ - public const MAX_TITLE_LENGTH = 150; - /** * Maximum allowed attributes in a variation; * @@ -134,11 +120,8 @@ public function validate() { $this->validate_sync_enabled_globally(); $this->validate_product_status(); $this->validate_product_sync_field(); - $this->validate_product_price(); $this->validate_product_visibility(); $this->validate_product_terms(); - $this->validate_product_description(); - $this->validate_product_title(); } /** @@ -151,11 +134,8 @@ public function validate() { public function validate_but_skip_status_check() { $this->validate_sync_enabled_globally(); $this->validate_product_sync_field(); - $this->validate_product_price(); $this->validate_product_visibility(); $this->validate_product_terms(); - $this->validate_product_description(); - $this->validate_product_title(); } /** @@ -166,11 +146,8 @@ public function validate_but_skip_status_check() { */ public function validate_but_skip_sync_field() { $this->validate_sync_enabled_globally(); - $this->validate_product_price(); $this->validate_product_visibility(); $this->validate_product_terms(); - $this->validate_product_description(); - $this->validate_product_title(); } /** @@ -361,72 +338,6 @@ protected function validate_product_sync_field() { } } - /** - * "allow simple or variable products (and their variations) with zero or empty price - exclude other product types with zero or empty price" - * unsure why but that's what we're doing - * - * @throws ProductExcludedException If product should not be synced. - */ - protected function validate_product_price() { - $primary_product = $this->product_parent ? $this->product_parent : $this->product; - - // Variable and simple products are allowed to have no price. - if ( in_array( $primary_product->get_type(), [ 'simple', 'variable' ], true ) ) { - return; - } - - if ( ! Products::get_product_price( $this->product ) ) { - throw new ProductExcludedException( __( 'If product is not simple, variable or variation it must have a price.', 'facebook-for-woocommerce' ) ); - } - } - - /** - * Check if the description field has correct format according to: - * Product Description Specifications for Catalogs : https://www.facebook.com/business/help/2302017289821154 - * - * @throws ProductInvalidException If product description does not meet the requirements. - */ - protected function validate_product_description() { - /* - * First step is to select the description that we want to evaluate. - * Main description is the one provided for the product in the Facebook. - * If it is blank, product description will be used. - * If product description is blank, shortname will be used. - */ - $description = $this->facebook_product->get_fb_description(); - - /* - * Requirements: - * - No all caps descriptions. - * - Max length 5000. - * - Min length 30 ( tested and not required, will not enforce until this will become a hard requirement ) - */ - if ( \WC_Facebookcommerce_Utils::is_all_caps( $description ) ) { - throw new ProductInvalidException( __( 'Product description is all capital letters. Please change the description to sentence case in order to allow synchronization of your product.', 'facebook-for-woocommerce' ) ); - } - if ( strlen( $description ) > self::MAX_DESCRIPTION_LENGTH ) { - throw new ProductInvalidException( __( 'Product description is too long. Maximum allowed length is 5000 characters.', 'facebook-for-woocommerce' ) ); - } - } - - /** - * Check if the title field has correct format according to: - * Product Title Specifications for Catalogs : https://www.facebook.com/business/help/2104231189874655 - * - * @throws ProductInvalidException If product title does not meet the requirements. - */ - protected function validate_product_title() { - $title = $this->product->get_title(); - - /* - * Requirements: - * - Max length 150. - */ - if ( mb_strlen( $title, 'UTF-8' ) > self::MAX_TITLE_LENGTH ) { - throw new ProductInvalidException( __( 'Product title is too long. Maximum allowed length is 150 characters.', 'facebook-for-woocommerce' ) ); - } - } - /** * Check if variation product has proper settings. * diff --git a/includes/Products.php b/includes/Products.php index 399ef923a..30ed52085 100644 --- a/includes/Products.php +++ b/includes/Products.php @@ -91,7 +91,7 @@ private static function set_sync_for_products( array $products, $enabled ) { } // Remove excluded product from FB. - if ( "no" === $enabled && self::product_should_be_deleted( $product ) ) { + if ( "no" === $enabled ) { facebook_for_woocommerce()->get_integration()->delete_fb_product( $product ); } diff --git a/includes/fbproduct.php b/includes/fbproduct.php index 5c05e6b06..7b729f835 100644 --- a/includes/fbproduct.php +++ b/includes/fbproduct.php @@ -78,6 +78,7 @@ class WC_Facebook_Product { // Should match facebook-commerce.php while we migrate that code over // to this object. const FB_PRODUCT_DESCRIPTION = 'fb_product_description'; + const FB_SHORT_DESCRIPTION = 'fb_product_short_description'; const FB_PRODUCT_PRICE = 'fb_product_price'; const FB_SIZE = 'fb_size'; const FB_COLOR = 'fb_color'; @@ -102,6 +103,20 @@ class WC_Facebook_Product { const MAX_TIME = 'T23:59+00:00'; const MIN_TIME = 'T00:00+00:00'; + /** + * Maximum length of product description. + * + * @var int + */ + public const MAX_DESCRIPTION_LENGTH = 5000; + + /** + * Maximum length of product title. + * + * @var int + */ + public const MAX_TITLE_LENGTH = 150; + static $use_checkout_url = array( 'simple' => 1, 'variable' => 1, @@ -138,11 +153,6 @@ class WC_Facebook_Product { */ private $main_description; - /** - * @var bool Sync short description. - */ - private $sync_short_description; - /** * @var bool Product visibility on Facebook. */ @@ -153,6 +163,64 @@ class WC_Facebook_Product { */ public $rich_text_description; + /** @var array Standard Facebook fields that WooCommerce attributes can map to */ + private static $standard_facebook_fields = array( + 'size' => array('size'), + 'color' => array('color', 'colour'), + 'pattern' => array('pattern'), + 'material' => array('material'), + 'gender' => array('gender'), + 'age_group' => array('age_group') + ); + + + /** + * Check if a WooCommerce attribute maps to a standard Facebook field + * + * @param string $attribute_name The WooCommerce attribute name + * @return bool|string False if not mapped, or the Facebook field name if mapped + */ + public function check_attribute_mapping($attribute_name) { + $sanitized_name = \WC_Facebookcommerce_Utils::sanitize_variant_name($attribute_name, false); + + foreach (self::$standard_facebook_fields as $fb_field => $possible_matches) { + foreach ($possible_matches as $match) { + if (stripos($sanitized_name, $match) !== false) { + return $fb_field; + } + } + } + + return false; + } + + /** + * Get all attributes that are not mapped to standard Facebook fields + * + * @return array Array of unmapped attributes with 'name' and 'value' keys + */ + public function get_unmapped_attributes() { + $unmapped_attributes = array(); + $attributes = $this->woo_product->get_attributes(); + + foreach ($attributes as $attribute_name => $_) { + $value = $this->woo_product->get_attribute($attribute_name); + + if (!empty($value)) { + $mapped_field = $this->check_attribute_mapping($attribute_name); + + if ($mapped_field === false) { + $unmapped_attributes[] = array( + 'name' => $attribute_name, + 'value' => $value + ); + } + } + } + + return $unmapped_attributes; + } + public function __construct( $wpid, $parent_product = null ) { if ( $wpid instanceof WC_Product ) { @@ -167,7 +235,6 @@ public function __construct( $wpid, $parent_product = null ) { $this->gallery_urls = null; $this->fb_use_parent_image = null; $this->main_description = ''; - $this->sync_short_description = \WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT === facebook_for_woocommerce()->get_integration()->get_product_description_mode(); $this->rich_text_description = ''; if ( $meta = get_post_meta( $this->id, self::FB_VISIBILITY, true ) ) { @@ -196,7 +263,7 @@ public function __construct( $wpid, $parent_product = null ) { */ public function __get( $key ) { // Add warning for private properties. - if ( in_array( $key, array( 'fb_description', 'gallery_urls', 'fb_use_parent_image', 'main_description', 'sync_short_description' ), true ) ) { + if ( in_array( $key, array( 'fb_description', 'gallery_urls', 'fb_use_parent_image', 'main_description' ), true ) ) { /* translators: %s property name. */ _doing_it_wrong( __FUNCTION__, sprintf( esc_html__( 'The %s property is private and should not be accessed outside its class.', 'facebook-for-woocommerce' ), esc_html( $key ) ), '3.0.32' ); return $this->$key; @@ -637,7 +704,7 @@ public function get_fb_description() { $description = $post_content; } - if ( $this->sync_short_description || ( empty( $description ) && ! empty( $post_excerpt ) ) ) { + if ( empty( $description ) && ! empty( $post_excerpt ) ) { $description = $post_excerpt; } @@ -656,6 +723,72 @@ public function get_fb_description() { return apply_filters( 'facebook_for_woocommerce_fb_product_description', $description, $this->id ); } + /** + * Get the short description for a product. + * + * This function retrieves the short product description, but unlike the main description + * it should only use values specifically set for short description. + * + * @return string The short description for the product. + */ + public function get_fb_short_description() { + $short_description = ''; + + // For variations, first try to get the short description from the parent product + if (WC_Facebookcommerce_Utils::is_variation_type($this->woo_product->get_type())) { + // Get the parent product + $parent_id = $this->woo_product->get_parent_id(); + if ($parent_id) { + $parent_post = get_post($parent_id); + if ($parent_post && !empty($parent_post->post_excerpt)) { + $short_description = WC_Facebookcommerce_Utils::clean_string($parent_post->post_excerpt); + } + } + + // If no parent description found, try getting the variation's own excerpt + if (empty($short_description)) { + $post = $this->get_post_data(); + if ($post && !empty($post->post_excerpt)) { + $short_description = WC_Facebookcommerce_Utils::clean_string($post->post_excerpt); + } + } + + // If still no short description, check if main description is short enough + if (empty($short_description)) { + $main_description = WC_Facebookcommerce_Utils::clean_string($this->woo_product->get_description()); + if (!empty($main_description) && strlen($main_description) <= 1000) { + $short_description = $main_description; + } + } + + return apply_filters('facebook_for_woocommerce_fb_product_short_description', $short_description, $this->id); + } + + // Use the product's short description (excerpt) from WooCommerce + $post = $this->get_post_data(); + $post_excerpt = WC_Facebookcommerce_Utils::clean_string($post->post_excerpt); + + if (!empty($post_excerpt)) { + $short_description = $post_excerpt; + } + + // If no short description (excerpt) found, check if main description is short enough + if (empty($short_description)) { + $post_content = WC_Facebookcommerce_Utils::clean_string($post->post_content); + if (!empty($post_content) && strlen($post_content) <= 1000) { + $short_description = $post_content; + } + } + + /** + * Filters the FB product short description. + * + * @param string $short_description Facebook product short description. + * @param int $id WooCommerce Product ID. + */ + return apply_filters('facebook_for_woocommerce_fb_product_short_description', $short_description, $this->id); + } + /** * Get the rich text description for a product. * @@ -707,7 +840,7 @@ public function get_rich_text_description() { $rich_text_description = $post_content; } - if ( $this->sync_short_description || ( empty( $rich_text_description ) && ! empty( $post_excerpt ) ) ) { + if ( empty( $rich_text_description ) && ! empty( $post_excerpt ) ) { $rich_text_description = $post_excerpt; } } @@ -982,6 +1115,14 @@ public function get_fb_material() { true ); + // If empty and this is a variation, get the parent material + if ( empty( $fb_material ) && $this->is_type( 'variation' ) ) { + $parent_id = $this->get_parent_id(); + if ( $parent_id ) { + $fb_material = get_post_meta( $parent_id, self::FB_MATERIAL, true ); + } + } + return mb_substr(WC_Facebookcommerce_Utils::clean_string($fb_material), 0, 200); } @@ -1149,11 +1290,11 @@ private function build_checkout_url( $product_url ) { public function prepare_product( $retailer_id = null, $type_to_prepare_for = self::PRODUCT_PREP_TYPE_NORMAL ) { if ( ! $retailer_id ) { - $retailer_id = - WC_Facebookcommerce_Utils::get_fb_retailer_id( $this ); + $retailer_id = WC_Facebookcommerce_Utils::get_fb_retailer_id( $this ); } - $image_urls = $this->get_all_image_urls(); + $image_urls = $this->get_all_image_urls(); + // Replace WordPress sanitization's ampersand with a real ampersand. $product_url = str_replace( '&%3B', @@ -1169,7 +1310,8 @@ public function prepare_product( $retailer_id = null, $type_to_prepare_for = sel $categories = WC_Facebookcommerce_Utils::get_product_categories( $id ); $product_data = array(); - $product_data[ 'description' ] = $this->get_fb_description(); + $product_data[ 'description' ] = Helper::str_truncate( $this->get_fb_description(), self::MAX_DESCRIPTION_LENGTH ); + $product_data[ 'short_description' ] = $this->get_fb_short_description(); $product_data[ 'rich_text_description' ] = $this->get_rich_text_description(); $product_data[ 'product_type' ] = $categories['categories']; $product_data[ 'brand' ] = Helper::str_truncate( $this->get_fb_brand(), 100 ); @@ -1181,15 +1323,15 @@ public function prepare_product( $retailer_id = null, $type_to_prepare_for = sel $product_data[ 'condition' ] = $this->get_fb_condition(); $product_data[ 'size' ] = $this->get_fb_size(); $product_data[ 'color' ] = $this->get_fb_color(); - $product_data[ 'mpn' ] = $this->get_fb_mpn(); $product_data[ 'pattern' ] = Helper::str_truncate( $this->get_fb_pattern(), 100 ); $product_data[ 'age_group' ] = $this->get_fb_age_group(); $product_data[ 'gender' ] = $this->get_fb_gender(); $product_data[ 'material' ] = Helper::str_truncate( $this->get_fb_material(), 100 ); - $product_data[ 'pattern' ] = Helper::str_truncate( $this->get_fb_pattern(), 100 ); + // $product_data[ 'woo_product_type' ] = $this->get_type(); + // $product_data[ 'unmapped_attributes' ] = $this->get_unmapped_attributes(); if ( self::PRODUCT_PREP_TYPE_ITEMS_BATCH === $type_to_prepare_for ) { - $product_data['title'] = WC_Facebookcommerce_Utils::clean_string( $this->get_title() ); + $product_data['title'] = Helper::str_truncate( WC_Facebookcommerce_Utils::clean_string( $this->get_title() ), self::MAX_TITLE_LENGTH ); $product_data['image_link'] = $image_urls[0]; $product_data['additional_image_link'] = $this->get_additional_image_urls( $image_urls ); $product_data['link'] = $product_url; diff --git a/includes/fbproductfeed.php b/includes/fbproductfeed.php index feb326dfe..f40ea5318 100644 --- a/includes/fbproductfeed.php +++ b/includes/fbproductfeed.php @@ -384,7 +384,9 @@ public function get_product_feed_header_row() { return 'id,title,description,image_link,link,product_type,' . 'brand,price,availability,item_group_id,checkout_url,' . 'additional_image_link,sale_price_effective_date,sale_price,condition,' . - 'visibility,gender,color,size,pattern,google_product_category,default_product,variant,gtin,quantity_to_sell_on_facebook,rich_text_description,external_update_time' . PHP_EOL; + 'visibility,gender,color,size,pattern,google_product_category,default_product,'. + 'variant,gtin,quantity_to_sell_on_facebook,rich_text_description,external_update_time,'. + 'external_variant_id'. PHP_EOL; } @@ -534,7 +536,8 @@ private function prepare_product_for_feed( $woo_product, &$attribute_variants ) static::format_string_for_feed( static::get_value_from_product_data( $product_data, 'gtin' )) . ',' . static::format_string_for_feed( static::get_value_from_product_data( $product_data, 'quantity_to_sell_on_facebook' )) . ',' . static::format_string_for_feed( static::get_value_from_product_data( $product_data, 'rich_text_description' ) ) . ',' . - static::get_value_from_product_data( $product_data, 'external_update_time' ) . PHP_EOL; + static::get_value_from_product_data( $product_data, 'external_update_time' ) . ',' . + static::get_value_from_product_data( $product_data, 'external_variant_id' ) . PHP_EOL; } private static function format_additional_image_url( $product_image_urls ) { diff --git a/package.json b/package.json index eb4db21f8..4c04e8658 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "facebook-for-woocommerce", - "version": "3.4.6", + "version": "3.4.7", "author": "Facebook", "homepage": "https://woocommerce.com/products/facebook/", "license": "GPL-2.0", diff --git a/readme.txt b/readme.txt index 6b4ac9057..2e40c7533 100644 --- a/readme.txt +++ b/readme.txt @@ -1,9 +1,9 @@ === Facebook for WooCommerce === -Contributors: facebook, automattic, woothemes -Tags: facebook, woocommerce, marketing, product catalog feed, pixel +Contributors: facebook +Tags: meta, facebook, conversions api, catalog sync, ads Requires at least: 5.6 Tested up to: 6.7 -Stable tag: 3.4.6 +Stable tag: 3.4.7 Requires PHP: 7.4 MySQL: 5.6 or greater License: GPLv2 or later @@ -40,15 +40,29 @@ When opening a bug on GitHub, please give us as many details as possible. == Changelog == -= 3.4.6 - 2025-04-04 = -* Fix - Product availability syncing by @vinkmeta in #3010 -* Fix - Product attribute sort error which prevented product edits in certain scenarios by @iodic in #3012 - -= 3.4.5 - 2025-04-01 = -* Tweak - Add new product field external_update_time to measure product update latency by @mshymon in #2973 -* Fix - for 'PHP Warning: Undefined variable $fb_product_parent' by @mshymon in #2976 -* Fix - Updated logic to choose/create the feed for product sync by @mshymon in #2989 -* Add - Facebook Product Data Tab Enhancement by @devbodaghe in #2938 -* Fix - PHP Warning for empty attributes by @vinkmeta in #3001 += 3.4.7 - 2025-04-17 = +* Tweak - Added external_variant_id to the feed file by @mshymon in #2998 +* Tweak - Added support for syncing product type by @vinkmeta in #3013 +* Tweak - Relocating bulk actions by @SayanPandey in #2943 +* Tweak - Filtration on All Products page | Synced and Not Synced by @SayanPandey in #2999 +* Tweak - Updated PR Template by @vinkmeta in #3019 +* Fix - Null check exceptions by @vinkmeta in #3015 +* Tweak - Relaxing sync validations by @raymon1 in #2969 +* Tweak - Truncates extra characters from title and description by @raymon1 in #3023 +* Tweak - Updated PR template by @vinkmeta in #3053 +* Fix - The item not found error by using filter in the product endpoint @vinkmeta in #3054 +* Fix - Bug where MPN input box had no tooltip by @devbodaghe in #3034 +* Tweak - Investigation: WooCommerce to Facebook Product Attribute Syncing by @devbodaghe in #3033 +* Fix - Add parent product material inheritance for variations by @devbodaghe in #3035 +* Fix - Tooltip Messages for Skirt Length and Sleeve Length by @devbodaghe in #3039 +* Fix - Typo in Admin.php by @SayanPandey in #3063 +* Add - Add separate short_description field to Facebook product data by @devbodaghe in #3029 +* Tweak - Sync short description remove dropdown by @devbodaghe in #3031 +* Tweak - Short Description Fallback by @devbodaghe in #3048 +* Fix - A problem where Purchase event was not firing if thankyou page was not shown or Purchase state updated through Woo dashboard by @vahidkay-meta in #3060 +* Tweak - Remove type casting for gpc to int by @devbodaghe in 3078 +* Tweak - Disable unmapped fields to batch api by @devbodaghe in #3079 +* Fix - Product variation fields not saving correctly by @devbodaghe in #3090 +* Fix - Removed failing test due to merge conflicts @vinkmeta in #3103 [See changelog for all versions](https://raw.githubusercontent.com/facebook/facebook-for-woocommerce/refs/heads/main/changelog.txt). diff --git a/tests/Unit/ApiTest.php b/tests/Unit/ApiTest.php index e19f6a91c..d10c2f936 100644 --- a/tests/Unit/ApiTest.php +++ b/tests/Unit/ApiTest.php @@ -540,8 +540,9 @@ public function test_get_product_facebook_ids_creates_get_ids_request() { $response = function( $result, $parsed_args, $url ) use ( $facebook_product_catalog_id, $facebook_product_retailer_id ) { $this->assertEquals( 'GET', $parsed_args['method'] ); - $path = "catalog:{$facebook_product_catalog_id}:" . base64_encode( $facebook_product_retailer_id ); - $path = "/{$path}/?fields=id,product_group{id}"; + $filter = urlencode('{"retailer_id":{"eq":"' . $facebook_product_retailer_id . '"}}'); + $fields = urlencode('id,product_group{id}'); + $path = "/{$facebook_product_catalog_id}/products?filter={$filter}&fields={$fields}"; $this->assertEquals( "{$this->endpoint}{$this->version}{$path}", $url ); return [ @@ -560,6 +561,93 @@ public function test_get_product_facebook_ids_creates_get_ids_request() { $this->assertEquals( '8672727046074523', $response->get_facebook_product_group_id() ); } + /** + * Tests get product ids prepares a request to Facebook. + * This test is for the filter endpoint. + * + * @return void + * @throws ApiException In case of network request error. + */ + public function test_get_product_facebook_ids_creates_get_ids_request_with_filter_endpoint() { + $facebook_product_catalog_id = '726635365295186'; + $facebook_product_retailer_id = 'woo-cap_97'; + + $response = function( $result, $parsed_args, $url ) use ( $facebook_product_catalog_id, $facebook_product_retailer_id ) { + $this->assertEquals( 'GET', $parsed_args['method'] ); + + $filter = urlencode('{"retailer_id":{"eq":"' . $facebook_product_retailer_id . '"}}'); + $fields = urlencode('id,product_group{id}'); + $path = "/{$facebook_product_catalog_id}/products?filter={$filter}&fields={$fields}"; + + $this->assertEquals( "{$this->endpoint}{$this->version}{$path}", $url ); + return [ + 'body' => '{"data":[{"id":"8672727132741181","product_group":{"id":"8672727046074523"}}]}', + 'response' => [ + 'code' => 200, + 'message' => 'OK', + ], + ]; + }; + add_filter( 'pre_http_request', $response, 10, 3 ); + + $is_call_before_sync = true; + $product = WC_Helper_Product::create_simple_product(); + $woo_product = new WC_Facebook_Product( $product ); + $response = $this->api->get_product_facebook_ids( $facebook_product_catalog_id, $facebook_product_retailer_id, $woo_product, $is_call_before_sync ); + + $this->assertEquals( + [ + [ + 'id' => '8672727132741181', + 'product_group' => [ + 'id' => '8672727046074523', + ], + ], + ], + $response->data + ); + } + + /** + * Tests get product ids prepares a request to Facebook. + * This test is for the filter endpoint with a product retailer id that doesn't exist. + * + * @return void + * @throws ApiException In case of network request error. + */ + public function test_get_product_facebook_ids_creates_get_ids_request_with_filter_endpoint_nonexisting_product() { + $facebook_product_catalog_id = '726635365295186'; + $facebook_product_retailer_id = 'nonexisting_product_retailer_id'; + + $response = function( $result, $parsed_args, $url ) use ( $facebook_product_catalog_id, $facebook_product_retailer_id ) { + $this->assertEquals( 'GET', $parsed_args['method'] ); + + $filter = urlencode('{"retailer_id":{"eq":"' . $facebook_product_retailer_id . '"}}'); + $fields = urlencode('id,product_group{id}'); + $path = "/{$facebook_product_catalog_id}/products?filter={$filter}&fields={$fields}"; + + $this->assertEquals( "{$this->endpoint}{$this->version}{$path}", $url ); + return [ + 'body' => '{"data":[]}', + 'response' => [ + 'code' => 200, + 'message' => 'OK', + ], + ]; + }; + add_filter( 'pre_http_request', $response, 10, 3 ); + + $is_call_before_sync = true; + $product = WC_Helper_Product::create_simple_product(); + $woo_product = new \WC_Facebook_Product( $product ); + $response = $this->api->get_product_facebook_ids( $facebook_product_catalog_id, $facebook_product_retailer_id, $woo_product, $is_call_before_sync ); + + $this->assertEquals( + [], + $response->data + ); + } + /** * Tests delete product prepares a request to Facebook. * diff --git a/tests/Unit/WCFacebookCommerceIntegrationTest.php b/tests/Unit/WCFacebookCommerceIntegrationTest.php index aecf59db2..2757b33b6 100644 --- a/tests/Unit/WCFacebookCommerceIntegrationTest.php +++ b/tests/Unit/WCFacebookCommerceIntegrationTest.php @@ -573,11 +573,17 @@ public function test_on_product_save_existing_simple_product_sync_enabled_update */ public function test_on_product_save_existing_simple_product_sync_disabled_updates_the_product() { $product_to_update = WC_Helper_Product::create_simple_product(); - $product_to_delete = WC_Helper_Product::create_simple_product(); + + // The idea of the following mock is to overide the delete_product_item. + // The test is that the product item is being deleted as when it is marked for do not sync. + // The mock below is hit otherwise it would generate a random Mock_Response and throw error + $integration_mock = $this->createMock(WC_Facebookcommerce_Integration::class); + $integration_mock->method('delete_product_item'); + $this->integration = $integration_mock; $_POST['wc_facebook_sync_mode'] = Admin::SYNC_MODE_SYNC_DISABLED; - $_POST[ WC_Facebook_Product::FB_REMOVE_FROM_SYNC ] = $product_to_delete->get_id(); + $_POST[ WC_Facebook_Product::FB_REMOVE_FROM_SYNC ] = $product_to_update->get_id(); $product_to_update->set_stock_status( 'instock' ); @@ -586,11 +592,8 @@ public function test_on_product_save_existing_simple_product_sync_disabled_updat $this->integration->on_product_save( $product_to_update->get_id() ); - $this->assertEquals( null, get_post_meta( $product_to_delete->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_ITEM_ID, true ) ); - $this->assertEquals( null, get_post_meta( $product_to_delete->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_GROUP_ID, true ) ); - $this->assertEquals( 'no', get_post_meta( $product_to_update->get_id(), Products::SYNC_ENABLED_META_KEY, true ) ); - $this->assertEquals( 'no', get_post_meta( $product_to_update->get_id(), Products::VISIBILITY_META_KEY, true ) ); - + $this->assertEquals( 'facebook-product-item-id', get_post_meta( $product_to_update->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_ITEM_ID, true ) ); + $this->assertEquals( null, get_post_meta( $product_to_update->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_GROUP_ID, true ) ); } /** @@ -2375,82 +2378,6 @@ function ( $ids ) { $this->assertEquals( [ 111, 222, 333 ], $tags ); } - /** - * Tests get product description mode with no filter no options. - * - * @return void - */ - public function test_get_product_description_mode_no_filter_no_options() { - remove_all_filters( 'wc_facebook_product_description_mode' ); - delete_option( WC_Facebookcommerce_Integration::SETTING_PRODUCT_DESCRIPTION_MODE ); - - $mode = $this->integration->get_product_description_mode(); - - $this->assertEquals( WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_STANDARD, $mode ); - } - - /** - * Tests get product description mode with no filter. - * - * @return void - */ - public function test_get_product_description_mode_no_filter() { - remove_all_filters( 'wc_facebook_product_description_mode' ); - add_option( - WC_Facebookcommerce_Integration::SETTING_PRODUCT_DESCRIPTION_MODE, - WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT - ); - - $mode = $this->integration->get_product_description_mode(); - - $this->assertEquals( WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT, $mode ); - } - - /** - * Tests get product description mode with filter. - * - * @return void - */ - public function test_get_product_description_mode_with_filter() { - add_filter( - 'wc_facebook_product_description_mode', - function ( $mode ) { - return WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_STANDARD; - } - ); - - add_option( - WC_Facebookcommerce_Integration::SETTING_PRODUCT_DESCRIPTION_MODE, - WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT - ); - - $mode = $this->integration->get_product_description_mode(); - - $this->assertEquals( WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_STANDARD, $mode ); - } - - /** - * Tests get product description mode falls back into default mode if mode is not recognised as valid mode. - * - * @return void - */ - public function test_get_product_description_mode_falls_back_to_default_when_unknown_mode() { - add_filter( - 'wc_facebook_product_description_mode', - function ( $mode ) { - return 'super-duper-description-mode-123'; - } - ); - - add_option( - WC_Facebookcommerce_Integration::SETTING_PRODUCT_DESCRIPTION_MODE, - WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT - ); - - $mode = $this->integration->get_product_description_mode(); - - $this->assertEquals( WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_STANDARD, $mode ); - } /** * Tests product catalog id option update with valid catalog id value. @@ -3288,4 +3215,49 @@ public function test_get_product_fbid_calls_facebook_and_sets_post_meta_value_fo $this->assertEquals( 'product-id', $facebook_product_id ); $this->assertEquals( 'product-id', get_post_meta( $product->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_ITEM_ID, true ) ); } + + /** + * Tests get product facebook id calls facebook graph api with the endpoint with filter to get id and updates + * post meta item id value. + * + * @return void + */ + public function test_get_product_fbid_calls_facebook_and_sets_post_meta_value_for_item_id_with_filter_endpoint() { + add_option( WC_Facebookcommerce_Integration::OPTION_PRODUCT_CATALOG_ID, '1122334455' ); + + $product = WC_Helper_Product::create_simple_product(); + $fb_retailer_id = WC_Facebookcommerce_Utils::get_fb_retailer_id( new WC_Facebook_Product( $product->get_id() ) ); + + $this->api->expects( $this->once() ) + ->method( 'get_product_facebook_ids' ) + ->with( '1122334455', $fb_retailer_id ) + ->willReturn( new API\ProductCatalog\Products\Id\Response( '{"data":[{"id":"product-id","product_group":{"id":"product-group-id"}}]}' ) ); + + $facebook_product_id = $this->integration->get_product_fbid( WC_Facebookcommerce_Integration::FB_PRODUCT_ITEM_ID, $product->get_id() ); + + $this->assertEquals( 'product-id', $facebook_product_id ); + $this->assertEquals( 'product-id', get_post_meta( $product->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_ITEM_ID, true ) ); + } + + /** + * Tests get product facebook id calls facebook graph api with the endpoint with filter to find that the item doesn't exist. + * + * @return void + */ + public function test_get_product_fbid_calls_facebook_and_sets_post_meta_value_for_item_id_with_filter_endpoint_empty_data() { + add_option( WC_Facebookcommerce_Integration::OPTION_PRODUCT_CATALOG_ID, '1122334455' ); + + $product = WC_Helper_Product::create_simple_product(); + $fb_retailer_id = WC_Facebookcommerce_Utils::get_fb_retailer_id( new WC_Facebook_Product( $product->get_id() ) ); + + $this->api->expects( $this->once() ) + ->method( 'get_product_facebook_ids' ) + ->with( '1122334455', $fb_retailer_id ) + ->willReturn( new API\ProductCatalog\Products\Id\Response( '{"data":[]}' ) ); + + $facebook_product_id = $this->integration->get_product_fbid( WC_Facebookcommerce_Integration::FB_PRODUCT_ITEM_ID, $product->get_id() ); + + $this->assertEquals( null, $facebook_product_id ); + $this->assertEquals( null, get_post_meta( $product->get_id(), WC_Facebookcommerce_Integration::FB_PRODUCT_ITEM_ID, true ) ); + } } diff --git a/tests/Unit/fbproductTest.php b/tests/Unit/fbproductTest.php index 7be356234..56816aab9 100644 --- a/tests/Unit/fbproductTest.php +++ b/tests/Unit/fbproductTest.php @@ -93,15 +93,6 @@ public function test_get_fb_description_from_post_content() { $description = $facebook_product->get_fb_description(); $this->assertEquals( $description, get_post( $product->get_id() )->post_content ); - // Gets description from excerpt ignoring content when short mode is set - add_option( - WC_Facebookcommerce_Integration::SETTING_PRODUCT_DESCRIPTION_MODE, - WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT - ); - - $facebook_product = new \WC_Facebook_Product( $product ); - $description = $facebook_product->get_fb_description(); - $this->assertEquals( $description, get_post( $product->get_id() )->post_excerpt ); } /** @@ -653,12 +644,6 @@ public function test_get_rich_text_description() { $description = $facebook_product->get_rich_text_description(); $this->assertEquals('

product content description

', $description); - // Test 6: Falls back to post excerpt if content is empty and sync_short_description is true - add_option( - WC_Facebookcommerce_Integration::SETTING_PRODUCT_DESCRIPTION_MODE, - WC_Facebookcommerce_Integration::PRODUCT_DESCRIPTION_MODE_SHORT - ); - $product->set_description(''); $product->set_short_description('

short description test

'); $product->save(); @@ -904,14 +889,13 @@ private function create_product_attribute($name, $value, $is_taxonomy) { $term_ids[] = $term['term_id']; } } - $attribute->set_options($term_ids); - $attribute->set_taxonomy(true); + $attribute->is_taxonomy(true); } else { // For custom attributes $values = is_array($value) ? $value : [$value]; $attribute->set_options($values); - $attribute->set_taxonomy(false); + $attribute->is_taxonomy(false); } $attribute->set_position(0); @@ -1056,4 +1040,241 @@ public function test_external_update_time_unset() { $this->assertEquals(isset($data['external_update_time']), false); } + + /** + * Test fallback to main description when it's less than 1000 characters. + */ + public function test_get_fb_short_description_fallback_to_short_main_description() { + // Arrange + $product = WC_Helper_Product::create_simple_product(); + $short_description = 'Short main description'; + + // Set up the test conditions + $product->set_description($short_description); + $product->set_short_description(''); // Ensure short description is empty + $product->save(); + + // Act + $facebook_product = new \WC_Facebook_Product($product); + $result_description = $facebook_product->get_fb_short_description(); + + // Assert + $this->assertEquals( + $short_description, + $result_description, + 'Short main description should be used when excerpt is empty' + ); + } + + /** + * Test fallback to main description when it's exactly 1000 characters. + */ + public function test_get_fb_short_description_fallback_to_exact_length_main_description() { + // Arrange + $product = WC_Helper_Product::create_simple_product(); + $exact_length_description = str_repeat('a', 1000); + + // Set up the test conditions + $product->set_description($exact_length_description); + $product->set_short_description(''); // Ensure short description is empty + $product->save(); + + // Act + $facebook_product = new \WC_Facebook_Product($product); + $result_description = $facebook_product->get_fb_short_description(); + + // Assert + $this->assertEquals( + $exact_length_description, + $result_description, + 'Main description of exactly 1000 characters should be used when excerpt is empty' + ); + $this->assertEquals( + 1000, + strlen($result_description), + 'Result description should be exactly 1000 characters long' + ); + } + + /** + * Test that main description is not used when it exceeds 1000 characters. + */ + public function test_get_fb_short_description_no_fallback_to_long_main_description() { + // Arrange + $product = WC_Helper_Product::create_simple_product(); + $too_long_description = str_repeat('a', 1001); + + // Set up the test conditions + $product->set_description($too_long_description); + $product->set_short_description(''); // Ensure short description is empty + $product->save(); + + // Act + $facebook_product = new \WC_Facebook_Product($product); + $result_description = $facebook_product->get_fb_short_description(); + + // Assert + $this->assertEquals( + '', + $result_description, + 'Should not fallback to main description if it exceeds 1000 characters' + ); + $this->assertNotEquals( + $too_long_description, + $result_description, + 'Long description should not be used even if no other description is available' + ); + $this->assertLessThan( + strlen($too_long_description), + strlen($result_description), + 'Result description should be shorter than the too-long main description' + ); + } + + /** + * Test that short description is always preferred over main description, even when both are present + * and main description is short enough to be used. + */ + public function test_get_fb_short_description_prefers_short_over_main() { + // Arrange + $product = WC_Helper_Product::create_simple_product(); + $short_description = 'Short product description'; + $main_description = 'Main product description that is also short'; + + // Set up both descriptions + $product->set_description($main_description); + $product->set_short_description($short_description); + $product->save(); + + // Act + $facebook_product = new \WC_Facebook_Product($product); + $result_description = $facebook_product->get_fb_short_description(); + + // Assert + $this->assertEquals( + $short_description, + $result_description, + 'Short description should be used when available, regardless of main description length' + ); + + // Verify we're not using the main description + $this->assertNotEquals( + $main_description, + $result_description, + 'Main description should not be used when short description is available' + ); + } + + /** + * Test get_unmapped_attributes with no attributes + */ + public function test_get_unmapped_attributes_no_attributes() { + $product = WC_Helper_Product::create_simple_product(); + $facebook_product = new \WC_Facebook_Product($product); + + $unmapped_attributes = $facebook_product->get_unmapped_attributes(); + $this->assertIsArray($unmapped_attributes); + $this->assertEmpty($unmapped_attributes); + } + + /** + * Test get_unmapped_attributes with only mapped attributes + */ + public function test_get_unmapped_attributes_only_mapped() { + $product = WC_Helper_Product::create_simple_product(); + + // Add mapped attributes (size, color) + $attributes = array(); + $attributes[] = $this->create_product_attribute('size', 'Large', false); + $attributes[] = $this->create_product_attribute('color', 'Blue', false); + $product->set_attributes($attributes); + $product->save(); + + $facebook_product = new \WC_Facebook_Product($product); + $unmapped_attributes = $facebook_product->get_unmapped_attributes(); + + $this->assertIsArray($unmapped_attributes); + $this->assertEmpty($unmapped_attributes); + } + + /** + * Test get_unmapped_attributes with only unmapped attributes + */ + public function test_get_unmapped_attributes_only_unmapped() { + $product = WC_Helper_Product::create_simple_product(); + + // Add unmapped attributes + $attributes = array(); + $attributes[] = $this->create_product_attribute('weight', '2kg', false); + $attributes[] = $this->create_product_attribute('style', 'Modern', false); + $product->set_attributes($attributes); + $product->save(); + + $facebook_product = new \WC_Facebook_Product($product); + $unmapped_attributes = $facebook_product->get_unmapped_attributes(); + + $this->assertIsArray($unmapped_attributes); + $this->assertCount(2, $unmapped_attributes); + + // Verify first unmapped attribute + $this->assertEquals('weight', $unmapped_attributes[0]['name']); + $this->assertEquals('2kg', $unmapped_attributes[0]['value']); + + // Verify second unmapped attribute + $this->assertEquals('style', $unmapped_attributes[1]['name']); + $this->assertEquals('Modern', $unmapped_attributes[1]['value']); + } + + /** + * Test get_unmapped_attributes with both mapped and unmapped attributes + */ + public function test_get_unmapped_attributes_mixed() { + $product = WC_Helper_Product::create_simple_product(); + + // Add both mapped and unmapped attributes + $attributes = array(); + $attributes[] = $this->create_product_attribute('size', 'Medium', false); // mapped + $attributes[] = $this->create_product_attribute('weight', '3kg', false); // unmapped + $attributes[] = $this->create_product_attribute('color', 'Red', false); // mapped + $attributes[] = $this->create_product_attribute('style', 'Classic', false); // unmapped + $product->set_attributes($attributes); + $product->save(); + + $facebook_product = new \WC_Facebook_Product($product); + $unmapped_attributes = $facebook_product->get_unmapped_attributes(); + + $this->assertIsArray($unmapped_attributes); + $this->assertCount(2, $unmapped_attributes); + + // Verify only unmapped attributes are returned + $this->assertEquals('weight', $unmapped_attributes[0]['name']); + $this->assertEquals('3kg', $unmapped_attributes[0]['value']); + $this->assertEquals('style', $unmapped_attributes[1]['name']); + $this->assertEquals('Classic', $unmapped_attributes[1]['value']); + } + + /** + * Test get_unmapped_attributes with empty attribute values + */ + public function test_get_unmapped_attributes_empty_values() { + $product = WC_Helper_Product::create_simple_product(); + + // Add attributes with empty values + $attributes = array(); + $attributes[] = $this->create_product_attribute('weight', '', false); // empty unmapped + $attributes[] = $this->create_product_attribute('size', '', false); // empty mapped + $attributes[] = $this->create_product_attribute('style', 'Modern', false); // non-empty unmapped + $product->set_attributes($attributes); + $product->save(); + + $facebook_product = new \WC_Facebook_Product($product); + $unmapped_attributes = $facebook_product->get_unmapped_attributes(); + + $this->assertIsArray($unmapped_attributes); + $this->assertCount(1, $unmapped_attributes); + + // Verify only non-empty unmapped attribute is returned + $this->assertEquals('style', $unmapped_attributes[0]['name']); + $this->assertEquals('Modern', $unmapped_attributes[0]['value']); + } }