[英]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.