Я хочу спросить о функции продукта Woo-Commerce.
Я создаю в function.php для рекомендуемого продукта, как это:
function get_featured_product(){
$tax_query[] = array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => 'featured',
'operator' => 'IN',
);
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'ignore_sticky_posts' => 1,
'posts_per_page' => $products,
'orderby' => $orderby,
'order' => $order == 'asc' ? 'asc' : 'desc',
'tax_query' => $tax_query
);
$query = new WP_Query( $args );
ob_start();
?>
<div class="row">
<div class="col-md-12">
<div class="row">
<?php
while ( $query->have_posts() ) : $query->the_post(); global $product; ?>
<div class="col-md-4">
<?php
if ( has_post_thumbnail( $query->post->ID ) )
echo get_the_post_thumbnail( $query->post->ID, 'full' );
else
echo '<img src="' . woocommerce_placeholder_img_src() . '" alt="Placeholder" width="65px" height="115px" />';
?>
<div class="content" style="padding: 0 20px;">
<h3><?php the_title(); ?></h3>
<p>
<?php echo $product->get_price_html(); ?>
</p>
<div class="row">
<div class="col-xs-3 col-md-3">
<a href="#"><img src="http://localhost/wellliveflorist/wp-content/uploads/2018/04/compare-pink.png" width="25" heigh="25" style="float: left;"></a>
</div>
<div class="col-xs-6 col-md-6" style="text-align: center;">
<?php
woocommerce_template_loop_add_to_cart( $loop->post, $product );
?>
</div>
<div class="col-xs-3 col-md-3">
[ti_wishlists_addtowishlist]
</div>
</div>
</div>
</div>
<?php
endwhile;
?>
</div>
</div>
</div><?php
return ob_get_clean();
wp_reset_query();
}
add_shortcode('featured_product', 'get_featured_product');
и это работает и показывает так:
но когда я нажимаю на иконку сердца (список желаний), получают только один идентификатор, другими словами, кнопка списка желаний получает только 1 идентификатор, что бы вы ни нажимали в другом продукте, все равно получался неправильный идентификатор продукта.
Кто-нибудь знает, что я должен изменить?
Похоже, вы используете плагин, который обрабатывает ваши функции списка желаний. Кажется, все настроено в рамках реального цикла вашего продукта.
Однако причина, по которой шорт-код списка желаний не работает, заключается в том, что я считаю, что нужно использовать другой шорт-код. Если вы перейдете на страницу их документации здесь: https://templateinvaders.com/documentation/ti-woocommerce-wishlist/widgets-and-shortcodes/
Согласно их документации, если вы хотите добавить пользовательскую кнопку добавления в список желаний для определенного продукта, идентификатор продукта должен идти вместе с ним. Поскольку вы находитесь в цикле, вы можете вывести идентификатор продукта в этом коротком коде:
[ti_wishlists_addtowishlist product_id = «999» Вариация_ид = «0»]Примечание: вам не нужно использовать идентификатор варианта, если ваш продукт не является переменным продуктом
Проблема найдена по этому коду шорткода …
function shortcode( $atts = array() ) {
global $product;
$default = array(
'product_id' => 0,
'variation_id' => 0,
'loop' => 'no',
);
if ( $product && is_a( $product, 'WC_Product' ) ) {
$default['product_id'] = ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $product->id : ( $product->is_type( 'variation' ) ? $product->get_parent_id() : $product->get_id() ) );
$default['variation_id'] = ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $product->variation_id : ( $product->is_type( 'variation' ) ? $product->get_id() : 0 ) );
}
$atts = shortcode_atts( $default, $atts );
ob_start();
if ( 'yes' === $atts['loop'] ) {
$this->is_loop = true;
$this->htmloutput( $atts, true );
$this->is_loop = false;
} else {
$this->htmloutput( $atts, true );
}
return ob_get_clean();
}
Без передачи параметров в ti_wishlists_addtowishlist
он использует глобальную переменную $product
, Который не в вашей петле.
попробуйте изменить [ti_wishlists_addtowishlist]
в
[ti_wishlists_addtowishlist product_id="<?php echo $query->post->ID; ?>"]
используя шорткод [ti_wishlists_addtowishlist product_id = «id;?>»]