我在这里搜索并尝试修改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个产品按我想要的方式对我的产品进行分类和显示。
有什么办法可以做到这一点?我已经在这部分停留了很长时间,而且似乎找不到解决方法。
答案 0 :(得分:0)
解决方案:
最后,我要做的就是简单地创建一个函数
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>";
}
?>
我希望这将对那些尝试这样做的人有所帮助。