Task 6679 | Доработал подробную страницу товара + вывел таблицу с рекомендациями через отдельный тип записями
parent
830948cf05
commit
0253ba2472
@ -1,74 +1,105 @@ |
|||||||
<?php |
<?php |
||||||
|
|
||||||
|
// add_filter('timber/context', function($context) { |
||||||
|
// $context['test'] = 111111111; |
||||||
|
// return $context; |
||||||
|
// }); |
||||||
|
|
||||||
add_filter('timber/context', function($context) { |
// $product->is_type('variable') |
||||||
if (function_exists('is_product') && is_product()) { |
$product; |
||||||
$product_id = get_the_ID(); |
$product_type; |
||||||
$product = wc_get_product($product_id); |
$context_for_twig; |
||||||
|
|
||||||
if ($product) { |
|
||||||
$attributes = []; |
|
||||||
$product_attributes = $product->get_attributes(); |
|
||||||
|
|
||||||
if (!empty($product_attributes)) { |
|
||||||
foreach ($product_attributes as $taxonomy => $attribute) { |
|
||||||
if ($attribute->is_taxonomy()) { |
|
||||||
$terms = wc_get_product_terms($product_id, $taxonomy, ['fields' => 'all']); |
|
||||||
if (!empty($terms)) { |
|
||||||
$attr_values = []; |
|
||||||
foreach ($terms as $term) { |
|
||||||
$attr_values[] = [ |
|
||||||
'name' => $term->name, |
|
||||||
'slug' => $term->slug, |
|
||||||
'term_id' => $term->term_id, |
|
||||||
'link' => get_term_link($term->term_id, $taxonomy), |
|
||||||
]; |
|
||||||
} |
|
||||||
$attributes[wc_attribute_label($taxonomy)] = $attr_values; |
|
||||||
} |
|
||||||
} else { |
|
||||||
$attributes[wc_attribute_label($taxonomy)] = $attribute->get_options(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$context['product_attributes'] = $attributes; |
if (function_exists('is_product') && is_product()) { |
||||||
|
$product_id = get_the_ID(); |
||||||
|
$product = wc_get_product($product_id); |
||||||
|
|
||||||
if ($product->is_type('variable')) { |
$attributes = []; |
||||||
$available_variations = $product->get_available_variations(); |
$product_attributes = $product->get_attributes(); |
||||||
$variations_data = []; |
|
||||||
|
|
||||||
foreach ($available_variations as $variation) { |
/* Получение категорий */ |
||||||
$variation_id = $variation['variation_id']; |
$tags = get_the_terms($product_id, 'product_cat'); |
||||||
$variation_obj = wc_get_product($variation_id); |
if (!empty($tags) && !is_wp_error($tags)) { |
||||||
|
foreach ($tags as $tag) { |
||||||
|
$context_for_twig['product_tags'][] = $tag->name; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
$variations_data[] = [ |
/* Получение атрибутов */ |
||||||
'variation_id' => $variation_id, |
if (!empty($product_attributes)) { |
||||||
'price' => $variation_obj->get_price(), |
foreach ($product_attributes as $taxonomy => $attribute) { |
||||||
'regular_price' => $variation_obj->get_regular_price(), |
if ($attribute->is_taxonomy()) { |
||||||
'sale_price' => $variation_obj->get_sale_price(), |
$terms = wc_get_product_terms($product_id, $taxonomy, ['fields' => 'all']); |
||||||
'attributes' => $variation['attributes'] |
// $tags = wc_get_product_terms( $product_id, 'pa_catalog_tags' ); |
||||||
]; |
|
||||||
} |
|
||||||
|
|
||||||
$context['variations'] = $variations_data; |
if (!empty($terms)) { |
||||||
|
$attr_values = []; |
||||||
|
foreach ($terms as $term) { |
||||||
|
$attr_values[] = [ |
||||||
|
'name' => $term->name, |
||||||
|
'slug' => $term->slug, |
||||||
|
'term_id' => $term->term_id, |
||||||
|
'link' => get_term_link($term->term_id, $taxonomy), |
||||||
|
]; |
||||||
|
} |
||||||
|
$attributes[wc_attribute_label($taxonomy)] = $attr_values; |
||||||
|
if ($_GET["gp-test"]) { |
||||||
|
// ?gp-test=1 |
||||||
|
echo '<pre>'; |
||||||
|
print_r($attr_values); |
||||||
|
echo '</pre>'; |
||||||
|
} |
||||||
|
} |
||||||
|
} else { |
||||||
|
$attributes[wc_attribute_label($taxonomy)] = $attribute->get_options(); |
||||||
} |
} |
||||||
|
|
||||||
$meta_fields = [ |
} |
||||||
'composition' => get_post_meta($product_id, '_composition', true), |
} |
||||||
'feeding_recommendations' => get_post_meta($product_id, '_feeding_recommendations', true), |
|
||||||
'feeding_recommendations_table' => get_field('feeding_recommendations_table', $product_id), |
|
||||||
|
|
||||||
'nutritional_value' => get_post_meta($product_id, '_nutritional_value', true), |
$context_for_twig['product_attributes'] = $attributes; |
||||||
'vitamins' => get_post_meta($product_id, '_vitamins', true), |
|
||||||
'additives' => get_post_meta($product_id, '_additives', true), |
/* Получение вариаций товара */ |
||||||
'energy_value' => get_post_meta($product_id, '_energy_value', true), |
if ($product->is_type('variable')) { |
||||||
'important' => get_post_meta($product_id, '_important', true), |
$available_variations = $product->get_available_variations(); |
||||||
]; |
$variations_data = []; |
||||||
|
|
||||||
|
foreach ($available_variations as $variation) { |
||||||
|
$variation_id = $variation['variation_id']; |
||||||
|
$variation_obj = wc_get_product($variation_id); |
||||||
|
|
||||||
$context['product_meta'] = $meta_fields; |
$variations_data[] = [ |
||||||
|
'variation_id' => $variation_id, |
||||||
|
'price' => $variation_obj->get_price(), |
||||||
|
'regular_price' => $variation_obj->get_regular_price(), |
||||||
|
'sale_price' => $variation_obj->get_sale_price(), |
||||||
|
'attributes' => $variation['attributes'] |
||||||
|
]; |
||||||
} |
} |
||||||
|
|
||||||
|
$context_for_twig['variations'] = $variations_data; |
||||||
} |
} |
||||||
|
|
||||||
return $context; |
/* ACF-поля и мета-данные продукта */ |
||||||
|
$meta_fields = [ |
||||||
|
'composition' => get_post_meta($product_id, '_composition', true), |
||||||
|
'feeding_recommendations' => get_post_meta($product_id, '_feeding_recommendations', true), // Ранее выводились HTML-полем «Рекомендации по кормлению» |
||||||
|
'feeding_recommendations_table' => get_field('feeding_recommendations_table', get_post(get_field('p_tables_field', $product_id))) , // Таблица «Рекомендации по кормлению» |
||||||
|
'nutritional_value' => get_post_meta($product_id, '_nutritional_value', true), |
||||||
|
'vitamins' => get_post_meta($product_id, '_vitamins', true), |
||||||
|
'additives' => get_post_meta($product_id, '_additives', true), |
||||||
|
'energy_value' => get_post_meta($product_id, '_energy_value', true), |
||||||
|
'important' => get_post_meta($product_id, '_important', true), |
||||||
|
]; |
||||||
|
|
||||||
|
$context_for_twig['product_meta'] = $meta_fields; |
||||||
|
|
||||||
|
/* Товар оформляется по подписке? */ |
||||||
|
$context_for_twig['is_subscription'] = $product->is_type( array( 'subscription', 'subscription_variation', 'variable-subscription' )) ? true : false; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
add_filter('timber/context', function ($context) use ($context_for_twig) { |
||||||
|
return array_merge($context, $context_for_twig); |
||||||
}); |
}); |
||||||
|
|
||||||
|
Loading…
Reference in new issue