簡體   English   中英

修改Woocommerce模板文件以按產品類別顯示產品

[英]Modify Woocommerce template files to display products by product category

我在這里搜索並嘗試修改WooCommerce核心文件。

因此,我想做的是修改主題的woocommerce.php文件,因為我想按類別顯示商店中的產品。

到目前為止,我發現主題的根文件夾中的woocommerce.php文件中存在以下行

<?php woocommerce_content(); ?>

顯示所有產品。 然后,我發現針對每個產品都運行了mytheme / woocommerce /目錄中的content-product.php文件,並且用幾句話說,該文件包含每個產品的樣式和類。 換句話說,該文件正在循環內運行。

因此,我現在知道我必須修改一些實際上調用該文件的函數,並且想要將產品類別傳遞給該函數,以便可以顯示所需的產品。

做一些挖掘,我發現在wp-content / plugins / woocommerce / includes / wc-template-functions.php中有函數woocommerce_content(),其代碼如下

function woocommerce_content() {

if ( is_singular( 'product' ) ) {

    while ( have_posts() ) :
        the_post();
        wc_get_template_part( 'content', 'single-product' );
    endwhile;

} else {
    ?>

    <?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?>

        <h1 class="page-title"><?php woocommerce_page_title(); ?></h1>

    <?php endif; ?>

    <?php do_action( 'woocommerce_archive_description' ); ?>

    <?php if ( woocommerce_product_loop() ) : ?>

        <?php do_action( 'woocommerce_before_shop_loop' ); ?>

        <?php woocommerce_product_loop_start(); ?>

        <?php if ( wc_get_loop_prop( 'total' ) ) : ?>
            <?php while ( have_posts() ) : ?>
                <?php the_post(); ?>
                <?php wc_get_template_part( 'content', 'product' ); ?>
            <?php endwhile; ?>
        <?php endif; ?>

        <?php woocommerce_product_loop_end(); ?>

        <?php do_action( 'woocommerce_after_shop_loop' ); ?>

    <?php else : ?>

        <?php do_action( 'woocommerce_no_products_found' ); ?>

    <?php
    endif;

    }
}

最后,我認為wc_get_loop_prop函數是初始化循環的原因,我試圖找到一種將參數傳遞給該函數的方法(例如,產品類別ID),因此我可以調用woocommerce_content(118),其中118是產品類別並顯示我想要的產品

有什么辦法可以做到嗎? 我在這部分上停留了很長時間,而且似乎找不到解決方案。

解:

最后,我要做的就是簡單地創建一個函數

function getProductsByCat($theCat) {
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => 50,
        'tax_query' => array(
                array(
                    'taxonomy' => 'product_cat',
                    'field' => 'id',
                    'terms' => $theCat
                )
            )
        );
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) {
        while ( $loop->have_posts() ) : $loop->the_post();

            wc_get_template_part( 'content', 'product' );

        endwhile;
    } else {
        return false;
    }

    return true;
}

並在我的網站中的任何地方調用它,以按貓ID顯示產品,例如

<div class="col-md-12"><h4>Special Offers</h4></div>
<?php 
    if(!getProductsByCat(191)){
        //echo "<p>No products available.</p>";
    }
?>

我希望這將對那些嘗試這樣做的人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM