Các bạn khi sử dụng woocommer để đăng săn phẩm bán hàng thì sẽ nhận các thông báo lỗi trên Google Search Console. Cụ thể là thuộc tính hasMerchantReturnPolicy và shippingDetails trong schema offer của sản phẩm. Tuy đây không phải là yêu cầu bắt buộc nhưng gây cảnh báo khá khó chịu. Sau đây HTK sẽ hướng dẫn bạn cách xử lý.

sua loi hasMerchantReturnPolicy va shippingDetails

Cách sửa lỗi hasMerchantReturnPolicy và shippingDetails cho Woo

Chèn code đoạn code dưới đây vào wp-content/themes/{your-theme}/functions.php nhé

add_filter( 'woocommerce_structured_data_product_offer', 'htk_woocommerce_structured_data_product_offer' );
add_filter( 'wpseo_schema_product', 'htk_wpseo_schema_product' );
add_filter( 'rank_math/snippet/rich_snippet_product_entity', 'htk_rich_snippet_product_entity' );
add_filter( 'wp_schema_pro_schema_product', 'htk_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",
      "samedaydelivery" : "Yes",
      "unitCode": "DAY"
       
    },
    "transitTime": {
      "@type": "QuantitativeValue",
      "minValue": "0",
      "maxValue": "3",
      "samedaydelivery" : "Yes",
      "unitCode": "DAY"
    }                   
  },
  "shippingDestination": [
    {
      "@type": "DefinedRegion",
      "addressCountry": "VN",
      "addressRegion": ["VN"]
    }
  ]
}';
}
function htk_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 htk_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);
    }
    return $entity;
}
function htk_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 htk_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;
}

Trong đó có các thông số bạn cần thay đổi cho phù hợp với trang web của bạn nhé:

  • Trong hàm get_hasMerchantReturnPolicy:
    merchantReturnDays: là số ngày đổi trả hàng
    returnFees: Phí đổi trả
    returnMethod: Phương thức đổi trả
  • Trong hàm get_shippingDetails có:
    shippingRate > value: là giá tiền ship
    shippingRate > currency: đơn vị tiền ship
    deliveryTime: Các ngày vận chuyển sẽ hoạt động
    shippingDestination: Quốc gia giao hàng

Sửa lỗi hasMerchantReturnPolicy và shippingDetails dùng plugin

Ngoài cách trên bạn cũng có thể sử dụng plugin Schema & Structured Data for WP & AMP để xử lý lỗi trên nhé

fix hasMerchantReturnPolicy va shippingDetails

Chúc các bạn thực hiện thành công.

 

Chat hỗ trợ
Chat ngay