Fix Schema shipping detail mới 21/11/2025

Fix Schema shipping detail mới 21/11/2025

// Schema shipping detail
add_filter( ‘woocommerce_structured_data_product_offer’, ‘devvn_woocommerce_structured_data_product_offer’ );
add_filter( ‘wpseo_schema_product’, ‘devvn_wpseo_schema_product’ );
add_filter( ‘rank_math/snippet/rich_snippet_product_entity’, ‘devvn_rich_snippet_product_entity’, 99 );
add_filter( ‘wp_schema_pro_schema_product’, ‘devvn_wp_schema_pro_schema_product’ );
function get_hasMerchantReturnPolicy(){
return ‘{
“@type”: “MerchantReturnPolicy”,
“applicableCountry”: “vi”,
“returnPolicyCategory”: “https://schema.org/MerchantReturnFiniteReturnWindow”,
“merchantReturnDays”: “7”,
“returnMethod”: “https://schema.org/ReturnByMail”,
“returnFees”: “https://schema.org/FreeReturn”
}’;
}
function get_shippingDetails(){
return ‘{
“@type”: “OfferShippingDetails”,
“shippingRate”: {
“@type”: “MonetaryAmount”,
“value”: “0”,
“currency”: “VND”
},
“deliveryTime”: {
“@type”: “ShippingDeliveryTime”,
“businessDays”: {
“@type”: “OpeningHoursSpecification”,
“dayOfWeek”: [
“https://schema.org/Monday”,
“https://schema.org/Tuesday”,
“https://schema.org/Wednesday”,
“https://schema.org/Thursday”,
“https://schema.org/Friday”
]
},
“handlingTime”: {
“@type”: “QuantitativeValue”,
“minValue”: “0”,
“maxValue”: “3”,
“unitCode”: “DAY”

},
“transitTime”: {
“@type”: “QuantitativeValue”,
“minValue”: “0”,
“maxValue”: “3”,
“unitCode”: “DAY”
}
},
“shippingDestination”: [
{
“@type”: “DefinedRegion”,
“addressCountry”: “VN”,
“addressRegion”: [“VN”]
}
]
}’;
}
function devvn_wpseo_schema_product($data){
if(isset($data[‘offers’])){
$hasMerchantReturnPolicy = get_hasMerchantReturnPolicy();
$shippingDetails = get_shippingDetails();
foreach ($data[‘offers’] as $key => $offer){
if(!isset($offers[‘hasMerchantReturnPolicy’]) && $hasMerchantReturnPolicy){
$data[‘offers’][$key][‘hasMerchantReturnPolicy’] = json_decode($hasMerchantReturnPolicy, true);
}
if(!isset($offers[‘shippingDetails’]) && $shippingDetails){
$data[‘offers’][$key][‘shippingDetails’] = json_decode($shippingDetails, true);
}
}
}
return $data;
}
function devvn_rich_snippet_product_entity($entity){
global $product;
if(!is_singular(‘product’) || !$product || is_wp_error($product)) return $entity;
$hasMerchantReturnPolicy = get_hasMerchantReturnPolicy();
$shippingDetails = get_shippingDetails();
if(!isset($entity[‘offers’][‘hasMerchantReturnPolicy’]) && $hasMerchantReturnPolicy){
$entity[‘offers’][‘hasMerchantReturnPolicy’] = json_decode($hasMerchantReturnPolicy, true);
}
if(!isset($entity[‘offers’][‘shippingDetails’]) && $shippingDetails){
$entity[‘offers’][‘shippingDetails’] = json_decode($shippingDetails, true);
}
//Fix Rankmath pro
if(isset($entity[‘hasVariant’]) && $entity[‘hasVariant’]){
foreach ($entity[‘hasVariant’] as $k=>$productList){
if(!isset($productList[‘offers’][‘hasMerchantReturnPolicy’]) && $hasMerchantReturnPolicy){
$entity[‘hasVariant’][$k][‘offers’][‘hasMerchantReturnPolicy’] = json_decode($hasMerchantReturnPolicy, true);
}
if(!isset($productList[‘offers’][‘shippingDetails’]) && $shippingDetails){
$entity[‘hasVariant’][$k][‘offers’][‘shippingDetails’] = json_decode($shippingDetails, true);
}
}
}
return $entity;
}
function devvn_wp_schema_pro_schema_product($schema){
if(isset($schema[‘offers’]) && apply_filters( ‘wp_schema_pro_remove_product_offers’, true )) {
$hasMerchantReturnPolicy = get_hasMerchantReturnPolicy();
$shippingDetails = get_shippingDetails();
if (!isset($schema[‘offers’][‘hasMerchantReturnPolicy’]) && $hasMerchantReturnPolicy) {
$schema[‘offers’][‘hasMerchantReturnPolicy’] = json_decode($hasMerchantReturnPolicy, true);
}
if (!isset($schema[‘offers’][‘shippingDetails’]) && $shippingDetails) {
$schema[‘offers’][‘shippingDetails’] = json_decode($shippingDetails, true);
}
}
return $schema;
}
function devvn_woocommerce_structured_data_product_offer($offers){
$hasMerchantReturnPolicy = get_hasMerchantReturnPolicy();
$shippingDetails = get_shippingDetails();
if(!isset($offers[‘hasMerchantReturnPolicy’]) && $hasMerchantReturnPolicy){
$offers[‘hasMerchantReturnPolicy’] = json_decode($hasMerchantReturnPolicy, true);
}
if(!isset($offers[‘shippingDetails’]) && $shippingDetails){
$offers[‘shippingDetails’] = json_decode($shippingDetails, true);
}
return $offers;
}

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *