如何重写WooCommerce特定的循环或归档产品.php

时间:2018-05-29 作者:OT AMD

到目前为止,当我的woocommerce主题循环浏览商店页面中的所有产品时,我正在尝试自定义并添加一些引导类,以更为可靠的方式对其进行样式设置,因为生成的默认样式会导致布局问题。在调查该页面后,我发现这是循环的核心:

wc_get_template_part( \'content\', \'product\' );
不知道它看起来像什么,我可以编辑它,但我仍然认为它可能隐藏在某个地方,但不知道在哪里可以找到它。

从昨天开始,我就一直在思考如何编辑html元素。我还是主题开发的初学者,所以请帮助我,或者至少给我一些建议。这是完整存档产品。php,如下所示:

get_header(); ?>

<div class="row">
    <div class="small-12 medium-12 large-12 columns text-left">
        <!--breadcrumb-->
        <?php
        /**
         * woocommerce_before_main_content hook.
         *
         * @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs for the content)
         * @hooked woocommerce_breadcrumb - 20
         * @hooked WC_Structured_Data::generate_website_data() - 30
         */
        do_action( \'woocommerce_before_main_content\' );
        ?>
    </div>

    <header class="small-12 medium-6 large-6 columns text-left woocommerce-products-header collapse">
    <!--title-->
        <?php if ( apply_filters( \'woocommerce_show_page_title\', true ) ) : ?>

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

        <?php endif; ?>

        <?php
            /**
             * woocommerce_archive_description hook.
             *
             * @hooked woocommerce_taxonomy_archive_description - 10
             * @hooked woocommerce_product_archive_description - 10
             */
            do_action( \'woocommerce_archive_description\' );
        ?>
    </header>

    <div class="small-12 medium-6 large-6 columns collapse">

        <?php if ( have_posts() ) : ?>
        <?php
            /**
             * woocommerce_before_shop_loop hook.
             *
             * @hooked woocommerce_result_count - 20
             * @hooked woocommerce_catalog_ordering - 30
             */
            do_action( \'woocommerce_before_shop_loop\' );
        ?>
        <?php endif; ?>
    </div>

</div>


<div class="row small-up-2 large-up-4">
    <?php if ( have_posts() ) : ?>

    <?php #woocommerce_product_loop_start(); ?><!--removes ul-->

        <?php woocommerce_product_subcategories(); ?>

        <?php while ( have_posts() ) : the_post(); ?>

            <?php
                /**
                 * woocommerce_shop_loop hook.
                 *
                 * @hooked WC_Structured_Data::generate_product_data() - 10
                 */
                do_action( \'woocommerce_shop_loop\' );
            ?>

            <?php wc_get_template_part( \'content\', \'product\' ); ?>

        <?php endwhile; // end of the loop. ?>

    <?php #woocommerce_product_loop_end(); ?>

    <?php
        /**
         * woocommerce_after_shop_loop hook.
         *
         * @hooked woocommerce_pagination - 10
         */
        do_action( \'woocommerce_after_shop_loop\' );
    ?>

    <?php elseif ( ! woocommerce_product_subcategories( array( \'before\' => woocommerce_product_loop_start( false ), \'after\' => woocommerce_product_loop_end( false ) ) ) ) : ?>

    <?php
        /**
         * woocommerce_no_products_found hook.
         *
         * @hooked wc_no_products_found - 10
         */
        do_action( \'woocommerce_no_products_found\' );
    ?>

    <?php endif; ?> 
</div>

1 个回复
最合适的回答,由SO网友:user3135691 整理而成

WooCommerce模板根据您的需要和/或技能以不同的方式工作。

功能:

<?php
    wc_get_template_part(\'content\', \'product\');
WooCommerce是否等同于WordPress core template function:

<?php
    get_template_part(\'filename\');
重要的是要知道这与php的要求是一样的but 不使用。最后是php扩展。

在执行下面提到的任何步骤之前,请查看功能,确保您的主题支持WooCommerce。php用于此代码行:

<?php

// After setup theme hook adds WC support
function mytheme_add_woocommerce_support() {
    add_theme_support( \'woocommerce\' ); // <<<< here
}
add_action( \'after_setup_theme\', \'mytheme_add_woocommerce_support\' );
为了使用您自己的设计/模板,您有不同的选项:

1) 最简单的方法:

Create a "woocommerce.php" in your theme folder

WordPress将在主题中使用哪个文件,此文件的优先级最高。如果要使用第二种方法,请删除此文件。

2) 高级方式:

Create a "woocommerce" folder and copy the template which you want to modify into this folder.

WooCommerce/WordPress将识别它并使用此文件夹中提供的模板。此方法被调用“template overwriting“并允许您在主题中插入和修改WooCommerce前端输出的一部分。这是WC定制的更高级方式,可能对您来说是一个挑战,但肯定是更专业的方式。

在这种情况下,您可能正在查找此文件:

woocommerce/archive-product.php
这是显示店铺主要产品概述的模板文件。创建文件夹名称并将文件复制到其中后,可以为此布局创建自己的标记。

最后,您的新文件可能如下所示:

<?php get_header(); ?>
    <div class="container">
        <div class="row">
            <?php get_template_part(\'sidebars/sidebar-left\'); ?>
            <main class="col-xs-12 col-sm-9 col-md-9 col-lg-9">

                <?php
                    // Only run on shop archive pages, not single products or other pages
                    if ( is_shop() || is_product_category() || is_product_tag() ) {
                        // Products per page
                        $per_page = 24;
                        if ( get_query_var( \'taxonomy\' ) ) { // If on a product taxonomy archive (category or tag)
                            $args = array(
                                \'post_type\' => \'product\',
                                \'posts_per_page\' => $per_page,
                                \'paged\' => get_query_var( \'paged\' ),
                                \'tax_query\' => array(
                                    array(
                                        \'taxonomy\' => get_query_var( \'taxonomy\' ),
                                        \'field\'    => \'slug\',
                                        \'terms\'    => get_query_var( \'term\' ),
                                    ),
                                ),
                            );
                        } else { // On main shop page
                            $args = array(
                                \'post_type\' => \'product\',
                                \'orderby\' => \'date\',
                                \'order\' => \'DESC\',
                                \'posts_per_page\' => $per_page,
                                \'paged\' => get_query_var( \'paged\' ),
                            );
                        }
                        // Set the query
                        $products = new WP_Query( $args );
                        // Standard loop
                        if ( $products->have_posts() ) :
                            while ( $products->have_posts() ) : $products->the_post();
                                // Your new HTML markup goes here
                                ?>
                                <div class="col-xs-12 col-md-3">
                                    <h2><?php the_title(); ?></h2>
                                    <?php the_content(); ?>
                                    <?php // more stuff here... markup, classes etc. ?>
                                </div>
                                <?php
                            endwhile;
                            wp_reset_postdata();
                        endif;
                    } else { // If not on archive page (cart, checkout, etc), do normal operations
                        woocommerce_content();
                    }
                ?>

            </main>
        </div>
    </div>
</div>
<?php get_footer(); ?>
我希望这能让你了解它的工作原理。您还可以查看底部的WC后端系统页面。在那里,它将为您显示WC使用的模板。

结束

相关推荐

如何链接到详细信息页面(single.php?)在wp_loop中

我进行了如下wp\\U查询。这是其中的一部分。这是可行的。$args = .....; $query = new WP_Query($args); while($query->have_posts() ) : $query->the_post(); ?> <div class=\"each\"> <h4><?php the_title(); ?> &