Миниатюра и цена не отображаются в разделе сопутствующих товаров - PullRequest
2 голосов
/ 26 апреля 2019

Ну, я пытаюсь создать модуль со связанными продуктами, которые есть в моем магазине.В моем шаблоне есть файл по маршруту /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;

После этого я использую "шаблон "product-product", такой как страница со списком, где у меня нет проблем.

Например, чтобы показать миниатюру продукта, я попробовал это:

<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 работает на обеих страницах, она показывает идентификатор продукта, но когда я пытаюсь получить миниатюру URL с этим идентификатором, она возвращает меня "".

В первойimage Вы можете увидеть пример для страницы со списком, с другой стороны, на втором изображении вы можете увидеть пример для связанных продуктов для одной страницы продукта:

enter image description here

enter image description here

1 Ответ

0 голосов
/ 30 апреля 2019

Я изменяю функциональность и создал новый модуль, связанный с продуктом, но все еще не работает. Я не знаю почему ...

Я попробовал это:

  • В моем related.php:

    // Запрос товаров той же категории $ mproduct = new WP_Query (array ('post_type' => 'product', '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, это не 'ничего не показывать, почему я не знаю.

...