【发布时间】:2019-04-01 04:44:06
【问题描述】:
我在这里搜索并尝试修改 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 是一个产品分类并以我想要的方式展示我的产品。
有什么办法可以做到吗?我现在卡在这部分很长时间了,似乎找不到解决方案。
【问题讨论】:
-
如果你想修改这个现有函数,那么你可以使用 param..if($post->ID == id) 添加 if 条件,其中 id 来自函数调用参数
-
或者更好的是,您可以复制相同的代码并创建 wp 查询并查询带有 id 的帖子并执行与此函数中相同的操作
-
Woocommerce 模板通过主题被覆盖......所以这是允许的,甚至推荐用于一些自定义。阅读此官方文档:Template structure & Overriding templates via a theme。因此,这与更改核心文件无关。
标签: php wordpress templates woocommerce