Php 修改Woocommerce模板文件以按产品类别显示产品

Php 修改Woocommerce模板文件以按产品类别显示产品,php,wordpress,templates,woocommerce,Php,Wordpress,Templates,Woocommerce,我在这里搜索并试图修改WooCommerce核心文件 所以,我要做的是修改我的主题的woocommerce.php文件,因为我想按类别显示我商店中的产品 到目前为止,我发现在我主题的根文件夹中的woocommerce.php文件中有一行 <?php woocommerce_content(); ?> 其中显示所有产品。然后,我发现myteme/woocommerce/上的content-product.php文件正在为每个产品运行,简单地说,该文件包含每个产品的样式和类。换句话

我在这里搜索并试图修改WooCommerce核心文件

所以,我要做的是修改我的主题的woocommerce.php文件,因为我想按类别显示我商店中的产品

到目前为止,我发现在我主题的根文件夹中的woocommerce.php文件中有一行

<?php woocommerce_content(); ?>

其中显示所有产品。然后,我发现myteme/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;

    }
}
function\u content(){
if(是单数('product')){
while(have_posts()):
_post();
wc_获取_模板_零件(‘内容’、‘单个产品’);
结束时;
}否则{
?>
解决方案:

最后,我要做的是简单地创建一个函数

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;
}
并在我的网站上的任何地方调用它,以显示cat ID之类的产品

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

我希望这将有助于那些试图这样做的人。

如果你想修改这个现有函数,那么你可以使用param.if($post->ID==ID)添加if条件如果id来自函数调用参数,或者更好,您可以复制相同的代码,创建wp查询,查询id为的帖子,并在此函数中执行相同的操作。商业模板通过主题被覆盖…因此这是允许的,甚至建议用于某些自定义。阅读此官方文档:。因此不是关于更改核心文件。