簡體   English   中英

將 woocommerce 變體 GTIN 添加到結構化數據

[英]Add woocommerce variation GTIN to structured data

如果網店有可變產品,在某些情況下,這些變體具有唯一的 GTIN。 在我們的例子中,它是 EAN。 如何將這些不同的 GTINS 添加到結構化數據中? 我做了一個功能,在“offers”中插入多個“offer”,但是這里無法識別 GTIN。

這是功能:

//add structured data to the markup
function set_structured_data( $markup, $product ) {
        if ($product->is_type('simple')){
    $markup['brand'] = array('@type' => 'Brand', 'name' => get_post_meta( $product->get_id(), '_brand', true ) );
    $markup['gtin8'] =  get_post_meta( $product->get_id(), '_EAN', true );
        }
        if ($product->is_type('variable')){
            
            $available_variations = $product->get_available_variations();
            foreach ($available_variations as $variation) {
                $variation_id = $variation['variation_id'];
                $variproduct = wc_get_product($variation_id);
                $i++;
                $stock = $product->get_stock_status();
                
                $offers[] = array(
                        'type'                  => 'Offer',
                        'price'                 => $variproduct->get_price(),
                        'priceValidUntil'       => $priceuntil,
                        'priceSpecification'    => array( 
                            'price'                     => $variproduct->get_price(),
                            'priceCurrency'             => get_woocommerce_currency(),
                            'valueAddedTaxIncluded'     => 'http://schema.org/True'
                        ),
                        'priceCurrency'         => get_woocommerce_currency(),
                        'availability'          => 'http://schema.org/'.$stock.'',
                        'url'                   => get_the_permalink(),
                        'seller'                => array (
                        'type'                  => 'Organization',
                        'name'                  => 'HeatPerformance®',
                        'url'                   => get_the_permalink(),
              ));
        }
        $markup['offers'] =  $offers;
        $markup['brand'] = array('@type' => 'Brand', 'name' => get_post_meta( $product->get_id(), '_brand', true ) );
    }
    return $markup;
}
add_filter( 'woocommerce_structured_data_product',  'set_structured_data', 99, 2 );

有任何想法嗎?

好的,經過幾天的困惑,我在這里找到了解決方案的路徑: https : //support.google.com/merchants/answer/6386198?hl=en

結果是我更正了woocommerce的標准化方法並使每個變體成為獨特的產品。

因此,如果是這樣的可變產品,請首先刪除標記:

function set_structured_data( $markup, $product ) {
        if ($product->is_type('variable')) {
            $markup = array();
        }
        return $markup;
}
add_filter( 'woocommerce_structured_data_product',  'set_structured_data', 99, 2 );

然后再次構建 ld+json 腳本,然后是所需的方式:

function set_structured_data_variable() {
    global $product;
    if (isset($product)){
        if ($product->is_type('variable') && !empty($product)){
            $available_variations = $product->get_available_variations();
            $date = date("Y-m-d",strtotime(" + 3months"));
            $commenttext = '';
            $commentauthor = '';
            $commentdate = '';
            $comments = get_comments(array( 'post_id' => $product->get_id(), 'number' => '1' ));
    foreach($comments as $comment) {
        $commenttext = $comment->comment_content;
        $commentauthor = $comment->comment_author;
        $commentdate = $comment->comment_date;
    }
            foreach ($available_variations as $variation) {
                $variation_id = $variation['variation_id'];
                $variproduct = wc_get_product($variation_id);
                $i++;
                $gtin = 0000000000001;
                if (!empty(get_post_meta( $variation_id, '_EAN', true ))){
                    $gtin = get_post_meta( $variation_id, '_EAN', true );
                }
                $stock = $product->get_stock_status();
                $arrays[$i] = array(
                '@context'      => 'https://schema.org/',
                '@type'             => 'Product',
                'sku'           => $variproduct->get_sku(),
                'gtin13'        => $gtin,
                'image'         => get_the_post_thumbnail_url($product->get_id()),
                'name'          => implode(" / ", $variproduct->get_variation_attributes()),
                'description'   => wp_strip_all_tags(get_the_excerpt($product->get_id())),
                'brand'         => array('@type' => 'Brand', 'name' => get_post_meta( $product->get_id(), '_brand', true ) ),
                'review'        => array(
                                        '@type' => 'Review', 
                                        'reviewRating' => array ( 
                                            '@type' => 'Rating', 
                                            'ratingValue' => $product->get_review_count(),
                                            'bestRating' => '5',
                                            'worstRating' => '1',
                                            ),
                                        'author' => array(
                                        '@type' => 'person',
                                        'name' => $commentauthor,
                                        'reviewBody' => $commenttext,
                                        'datePublished' => $commentdate,
                                        )),
                'aggregateRating' => array (
                                        '@type' => 'AggregateRating',
                                        'ratingValue'=> $product->get_average_rating(),
                                        'reviewCount' => $product->get_rating_count(),
                                        ),

                'inProductGroupWithID' => $product->get_sku(),
                'offers' => array(
                        '@type'                 => 'Offer',
                        'price'                 => $variproduct->get_price(),
                        'priceValidUntil'       => $date,
                        'priceSpecification'    => array( 
                            'price'                     => $variproduct->get_price(),
                            'priceCurrency'             => get_woocommerce_currency(),
                            'valueAddedTaxIncluded'     => 'http://schema.org/True'
                        ),
                        'priceCurrency'         => get_woocommerce_currency(),
                        'availability'          => 'http://schema.org/'.$stock.'',
                        'url'                   => get_the_permalink(),
                        'seller'                => array (
                        'type'                  => 'Organization',
                        'name'                  => 'HeatPerformance®',
                        'url'                   => get_the_permalink(),
              )));
        }
        echo '<script type="application/ld+json" class="buronoort">[';
        $i = 0;
    foreach ($arrays as $array){
        $i++;
    echo json_encode($array);
    if ($i < array_key_last($arrays)){
    echo ',';
        }
    }
    echo ']</script>';
    }
    }
}
add_action('wp_head','set_structured_data_variable', 19);

在結構化數據的測試工具中進行了測試,並且可以正常工作。 然而,有點擔心的是產品評論,我必須研究多次評論后會發生什么。 另一個問題是 EAN,我已將其標准設置為“0000000000001”,因為尚未輸入所有 EANS。 所以這是一個辯論解決方案,但如果有人有更好的主意,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM