Woocommerce — получить значение атрибута по идентификатору варианта

#php #wordpress #woocommerce

#php #wordpress #woocommerce

Вопрос:

Я создаю заголовки продуктов для XML-ленты продуктов. Мне нужно получить значение изменения по идентификатору. В документации говорится:

 $text = apply_filters( 'xml_feeds_productname_variant', $text, $product_item->ID, $vars->ID );
  

Итак, я получил идентификатор вариации и отобразил его:

 function custom_product_name( $text, $product_id, $vars_id ) {
    global $product;
    
    $product_name = $product->get_name();
    $sku = $product->get_sku();
    
    $text = 'Example.com ' . $sku . ' ' . $product_name . ' ' . $vars_id;         
    return $text; 
}
add_filter( 'xml_feeds_productname_variant', 'custom_product_name', 10, 3 ); 
  

Теперь мне нужно отобразить значение изменения вместо $vars_id переменной. Если продукт выбрал вариант со значением 60x40cm, отобразите «60x40cm» в заголовке вместо $vars_id .

введите описание изображения здесь

Ответ №1:

  • Как это часто бывает, существуют разные способы, это один из них.
  • Обратите внимание, что использование глобальной переменной необязательно, поскольку у вас есть доступ к $product_id объекту продукта, который вы можете получить через wc_get_product
 function custom_product_name( $text, $product_id, $vars_id ) {
    // Get WC_Product_Variation Object
    $variation = wc_get_product( $vars_id );

    // Is a WC_Product
    if ( is_a( $variation, 'WC_Product' ) ) {       
        // Variation name
        $variation_name = implode( ' / ', $variation->get_variation_attributes() );
    
        // Output
        $text = 'Name: ' . $variation_name; 
    }
    
    return $text; 
}
add_filter( 'prefix_xml_feeds_productname_variant', 'custom_product_name', 10, 3 );