WooCommerce отображает переменные атрибуты продукта

Я пытаюсь отобразить атрибуты определенного продукта (например, идентификатор: 459), который имеет несколько вариантов, и пытаюсь отобразить некоторые атрибуты (например, имя, идентификатор, ссылку на продукт и изображение) на индексной странице. Мне удалось получить изображение и идентификатор варианта, однако теперь мне сложно отобразить URL-адрес продукта и отобразить переменное имя продукта.

Я попытался найти ответ в сети, но не смог найти ни кодекса, ни документации. Может кто-нибудь помочь?

Это мой рабочий код, отлично показывающий изображение и идентификатор.

<?php 
$product = new WC_Product_Variable( '459' );
$variations = $product->get_available_variations();

foreach ( $variations as $variation ) {
    echo "<img src=" . $variation['image']['thumb_src'] .">";
    echo $variation['variation_id'];
    echo $variation['variation_Name ']; // (Error: "Notice: Undefined index: variation_Name in   /var/www/wp-content/themes/...")
}                    
?>

Спасибо за вашу помощь заранее.

EDIT Это мой код, все работает отлично, за исключением того, что имя атрибута не получено.

Я получаю это сообщение об ошибке: Преобразование массива в строку в /var/www/wp-content

<?php 
$product = new WC_Product_Variable( '459' ); 
$variations = $product->get_available_variations(); 

foreach ( $product->get_variation_attributes() as $attribute_name =>   $ {
 $attributes[] = array( 'name' => ucwords( str_replace( 'attribute_', '', 
wc_attribute_taxonomy_slug( $attribute_name ) ) ), 
'option' => $attribute, ); 
echo $attribute;
}

foreach ( $variations as $variation ) { 

echo '<div class="col-3">';
echo '<a href="'.$product->get_permalink().'#variations-table">';

echo $product->get_title();

echo "<img src=" . $variation['image']['thumb_src'] .">";

echo 'View Product</a>';
echo '</div>';

} 

?>

Большое спасибо :)


person pv619    schedule 22.02.2021    source источник
comment
foreach ($product-›get_variation_attributes() as $attribute_name =› $attribute) { $attributes[] = array( 'name' => ucwords(str_replace('attribute_', '', wc_attribute_taxonomy_slug($attribute_name))), ' option' =› $атрибут, ); } print_r($атрибуты);   -  person wpdevloper_j    schedule 22.02.2021
comment
ваш код не подходит, я думаю   -  person wpdevloper_j    schedule 22.02.2021
comment
Спасибо тебе за помощь. Я не могу исправить проблему. Не могли бы вы помочь проверить код и помочь? Я не слишком знаком с Woocommerce, а также пытаюсь повторить проблему. Спасибо большое, очень приятно :)   -  person pv619    schedule 22.02.2021
comment
Я нашел другой метод, чтобы заменить slugname '_' пробелами и использовать имя с заглавной буквы. Надеюсь, это исправит проблему.   -  person pv619    schedule 22.02.2021


Ответы (1)


person    schedule
comment
Спасибо за ваш ответ и помощь, но, похоже, это не работает. - person pv619; 22.02.2021
comment
Он выдает следующее сообщение об ошибке Undefined variable: variation_id, Undefined offset: 0 и `Недопустимый аргумент для foreach()`. Помогите пожалуйста решить? Спасибо - person pv619; 22.02.2021
comment
нет необходимости добавлять это условие if($variation[‘variation_id’] == $variation_id) если вы уверены, что у вас есть переменный продукт 459 , попробуйте после удаления этого условия - person wpdevloper_j; 22.02.2021
comment
Спасибо, я удалил его, я все еще не могу получить имя переменной и ссылку на продукт. Я могу получить только изображение переменного продукта. Выдает ошибку: Undefined offset: 0 и Invalid argument supplied for foreach(). Спасибо. - person pv619; 22.02.2021
comment
/*Get attributes from loop*/ foreach($var_data[0] as $attrName => $var_name) { echo $var_name; } ?> Теперь это мой код. Спасибо за помощь. - person pv619; 22.02.2021
comment
$product = новый WC_Product_Variable('459'); $variations = $product-›get_available_variations(); $var_data = []; foreach ( $ вариации как $ вариация ) { $ var_data [] = $ вариация ['атрибуты']; } /*Получить атрибуты из цикла*/ foreach($var_data[0] as $attrName => $var_name) { echo $var_name; } /* этот обновленный код из myend */ - person wpdevloper_j; 22.02.2021
comment
этот приведенный выше код будет печатать только имена всех атрибутов - person wpdevloper_j; 22.02.2021
comment
Большое спасибо, похоже, он дает имя «slug» (name_name_name), а не имя переменной, и отображает самое первое имя slug, а не все. Извините за беспокойство, не могли бы вы помочь дальше :)? - person pv619; 22.02.2021
comment
Сколько вариаций у вас есть в вашем продукте? - person wpdevloper_j; 22.02.2021
comment
для идентификатора продукта 459 у меня есть 8 переменных продуктов, которые необходимо отобразить. Спасибо :) - person pv619; 22.02.2021
comment
Я могу получить изображения всех 8 переменных продуктов, просто я изо всех сил пытаюсь отображать их имена и URL-адреса. - person pv619; 22.02.2021
comment
для изображения вы можете использовать эту функцию для извлечения тега img со всеми $image_tag = $variation->get_image(); - person wpdevloper_j; 22.02.2021
comment
Я получил изображение, не могли бы вы помочь, как я могу получить название варианта, пожалуйста? Я только с этим борюсь. Спасибо :) - person pv619; 22.02.2021
comment
Вы пробовали функцию get_title()? - person wpdevloper_j; 22.02.2021
comment
да, он дает название основного продукта, содержащего идентификатор. Не названия вариаций. Спасибо :) - person pv619; 22.02.2021
comment
в woocommerce, если есть один продукт, который имеет несколько вариаций, то это просто вариация только атрибутов, но имя вариации продукта одинаково для всех - person wpdevloper_j; 22.02.2021
comment
Я неправильно понял теорию Woocommerce, возможно, мой вопрос был неправильным. Большое спасибо за вашу помощь. Как я могу получить имя атрибута переменного продукта, пожалуйста? - person pv619; 22.02.2021
comment
// атрибуты вариантов foreach ( $product-›get_variation_attributes() as $attribute_name =› $attribute ) { // атрибуты на основе таксономии имеют префикс pa_, в противном случае просто attribute_ $attributes[] = array( 'name' => ucwords( str_replace('attribute_', '', wc_attribute_taxonomy_slug($attribute_name))), 'option' => $attribute, ); } - person wpdevloper_j; 22.02.2021
comment
Большое спасибо за вашу помощь. Очень ценю это, это все еще не работает для меня. Позвольте мне опубликовать код в ответе. Так что это делает его eaiser для вас. Спасибо :) - person pv619; 22.02.2021
comment
Я обновил свой вопрос выше, см. РЕДАКТИРОВАТЬ ОТВЕТ. Спасибо и извините, мои знания php и woocommerce не очень хороши. Спасибо :) - person pv619; 22.02.2021