未在相关产品部分显示缩略图和价格

时间:2019-04-26 12:24:53

标签: wordpress woocommerce product

好吧,我正在尝试使用我商店中的相关产品创建一个模块。我的模板在/theme-name/woocommerce/single-product/related.php路径中有一个文件。在这里,我们可以看到一些有关如何调用相关产品的代码。它使用该模板作为上市产品页面(相同的模板),但是当我尝试缩小缩略图或价格时,它不起作用。它只显示产品名称,没有其他内容。

这是我在模板中用于/related.php文件的代码

<?php 
if ( $related_products ) : ?>
    <section id="nm-related" class="related products">
        <div class="nm-row">
            <div class="col-xs-12">
                <h2><?php esc_html_e( 'Related products', 'woocommerce' ); ?></h2>
                <?php woocommerce_product_loop_start(); ?>
                    <?php foreach ( $related_products as $related_product ) : ?>
                        <?php
                            $post_object = get_post( $related_product->get_id() );
                            setup_postdata( $GLOBALS['post'] =& $post_object );
                            wc_get_template_part( 'content', 'product' ); ?>
                    <?php endforeach; ?>
                <?php woocommerce_product_loop_end(); ?>
            </div>
        </div>
    </section>
<?php endif;

然后,我使用“内容-产品”模板(如列表页面),在那里我没有任何问题。

例如,要显示产品缩略图,我尝试过这样:

<div class="nm-shop-loop-thumbnail nm-loader">
    <a href="<?php echo esc_url( get_permalink() ); ?>" class="nm-shop-loop-thumbnail-link woocommerce-LoopProduct-link">
        <?php
        $id_pro = get_the_ID();
        $pro_2 = get_post_thumbnail_id($id_pro);
        $featured_image_url = wp_get_attachment_url( $pro_2 );
        if(! empty( $featured_image_url )) { ?>
            <?php
            /**
            * Hook: woocommerce_before_shop_loop_item_title.
            *
            * @hooked woocommerce_show_product_loop_sale_flash - 10
            * @hooked woocommerce_template_loop_product_thumbnail - 10
            */
            do_action( 'woocommerce_before_shop_loop_item_title' );
        } else { ?>
            <img src="https://cdn.mtods.ch/wp-content/uploads/sites/2/20190409092145/nopic.jpg" data-src="https://cdn.mtods.ch/wp-content/uploads/sites/2/20190409092145/nopic.jpg" data-srcset="https://cdn.mtods.ch/wp-content/uploads/sites/2/20190409092145/nopic.jpg 350w, https://cdn.mtods.ch/wp-content/uploads/sites/2/20190409092145/nopic.jpg 250w, https://cdn.mtods.ch/wp-content/uploads/sites/2/20190409092145/nopic.jpg 400w" alt="" sizes="(max-width: 350px) 100vw, 350px" width="350" height="420" class="attachment-woocommerce_thumbnail size-woocommerce_thumbnail wp-post-image  lazyloaded" srcset="https://cdn.mtods.ch/wp-content/uploads/sites/2/20190409092145/nopic.jpg 350w, https://cdn.mtods.ch/wp-content/uploads/sites/2/20190409092145/nopic.jpg 250w, https://cdn.mtods.ch/wp-content/uploads/sites/2/20190409092145/nopic.jpg 400w">
          <?php
          }
          ?>
    </a>
</div>

正如我所说,它适用于列表页,但不适用于相关产品部分的单页产品。

$ id_pro变量在两个页面中都起作用,它显示了产品的ID,但是当我尝试获取具有该ID的缩略图URL时,它将返回我“”。

在第一张图片中,您可以看到列表页面的示例,在第二张图片中,您可以看到单个产品页面的相关产品的示例:

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

我更改了功能并创建了一个新的相关产品模块,但是仍然无法正常工作,我不知道为什么...

我尝试过:

  • 在我的related.php中:

    //同类产品查询             $ mproduct = new WP_Query(array(                 'post_type'=>'产品',                 'product_cat'=> $ cat_slug,                 'posts_per_page'=> -1,             ));

            // Get query data
            $posts = $mproduct->get_posts();
            $num = $mproduct->post_count;
    
    
            // Create new array with the actual product in it
            $array_pro = [];
            $array_pro[] = $product_id;
    
            // Function for check if product is in array
            function test_function($rand_pro, $array_pro, $posts, $num) {
                if (in_array($rand_pro, $array_pro)) {
                    $new_pro_id = $posts[rand(0,$num-1)]->ID;
                    return true;
                } else {
                    return false;
                }
            }
    
            // If array is not full insert next elements
            while (count($array_pro) < 5) {
                $rand_pro = $posts[rand(0,$num-1)]->ID;
                $pro_in_array = test_function($rand_pro, $array_pro, $posts, $num);
                if ($pro_in_array == false) {
                    $array_pro[] = $rand_pro;
                }
            }
    
            // Remove first element of array
            array_shift($array_pro);
    
            ?>
            <div class="related-products-row">
                <?php
                foreach( $array_pro as $post ) { 
                    $rel_product_id = $post;
                    $rel_product_title = get_the_title($rel_product_id);
                    $rel_product_link = get_the_permalink($rel_product_id);
                    $rel_product_img_url = get_the_post_thumbnail($rel_product_id);
                    $_product = wc_get_product( $rel_product_id );
                    $rel_product_ref = $_product->get_attribute( 'reference' );
                    ?>
                    <div class="col-md-3">
                        <p><?php echo $rel_product_img_url; ?></p>
                    </div>
                    <?php
                }
            ?>
            </div>
    

如果可以看到,当我尝试获取名称时,我没有问题,但是当我尝试获取post_thumbnail_url或ref_number时,它没有显示任何内容,我不知道为什么。