woocommerce on page templates

2019-09-21 09:12发布

问题:

Ive made a new page template and copied the woocommerce archive-product.php into it but while the shop page works, the custom page does not, is there a way to make it function the same as the shop page? noticed it also does not pull in anything else from visual composer or normal content.

回答1:

For those who wants custom woocommerce shop template ( archive-product ) here is a sample template, which can be customized to any extent.

<?php

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

get_header( 'shop' ); ?>

<?php
/**
 * woocommerce_before_main_content hook
*
* @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs for the content)
* @hooked woocommerce_breadcrumb - 20
*/
do_action( 'woocommerce_before_main_content' ); ?>

<?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

global $post, $product;

$args = array( 
    'post_type'=>'product', 
    'posts_per_page'=>-1, 
    'orderby'=>'date', 
    'order'=>'ASC'      
);
// get all the posts ( here it would be all the wc products )
$posts = get_posts( $args );

/**
 * woocommerce_before_shop_loop hook
 *
 * @hooked woocommerce_result_count - 20
 * @hooked woocommerce_catalog_ordering - 30
 */
do_action( 'woocommerce_before_shop_loop' );

if( count( $posts ) > 0 ) { 

    woocommerce_product_loop_start();

    woocommerce_product_subcategories();

    foreach( $posts as $post ) {
        // this will put the current post into the GLOBAL $post object
        setup_postdata( $post );
        // this will put the product data into GLOBAL $product object
        wc_setup_product_data( $post ); ?>

        <!-- Now you have valid WP loop, put the content-product template here -->
        <?php wc_get_template_part( 'content', 'product' ); ?>

        <?php 
    }

    woocommerce_product_loop_end(); 

} else {
    wc_get_template( 'loop/no-products-found.php' );
}

/**
 * woocommerce_after_shop_loop hook
 *
 * @hooked woocommerce_pagination - 10
 */
do_action( 'woocommerce_after_shop_loop' );

/**
 * woocommerce_sidebar hook
 *
 * @hooked woocommerce_get_sidebar - 10
 */
do_action( 'woocommerce_sidebar' );

get_footer( 'shop' ); ?>