WordPress Woocommerce Рекомендуемая функция продукта с пожеланиями

Я хочу спросить о функции продукта 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 идентификатор, что бы вы ни нажимали в другом продукте, все равно получался неправильный идентификатор продукта. Кто-нибудь знает, что я должен изменить?

3 ответа

Похоже, вы используете плагин, который обрабатывает ваши функции списка желаний. Кажется, все настроено в рамках реального цикла вашего продукта.

Однако причина, по которой короткий код списка пожеланий не работает, заключается в том, что я считаю, что нужно использовать другой короткий код. Если вы перейдете на страницу их документации здесь: 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;?>"]

Другие вопросы по тегам