Показать все товары по категориям с WooCommerce - PullRequest
0 голосов
/ 20 февраля 2020

В WooCommerce я хочу отображать все категории в магазине в качестве заголовков, а все их продукты перечислены ниже в неупорядоченном списке. Возможно ли это сделать? Я видел несколько вещей, которые позволяют мне отображать список категорий или список продуктов для определенной категории c. Я использую эти хуки для страницы продукта, и этот код показывает только продукты. Так что я хочу получить помощь от этого. Заранее спасибо.

Here's what I'm currently using to list all categories:

<?php
/**
 * The template for displaying product content within loops
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/content-product.php.
 *
 * HOWEVER, on occasion WooCommerce will need to update template files and you
 * (the theme developer) will need to copy the new files to your theme to
 * maintain compatibility. We try to do this as little as possible, but it does
 * happen. When this occurs the version of the template file will be bumped and
 * the readme will list any important changes.
 *
 * @see     https://docs.woocommerce.com/document/template-structure/
 * @package WooCommerce/Templates
 * @version 3.6.0
 */

defined( 'ABSPATH' ) || exit;

global $product;

// Ensure visibility.
if ( empty( $product ) || ! $product->is_visible() ) {
    return;
}
?>
<li <?php wc_product_class( '', $product ); ?>>
    <?php
    /**
     * Hook: woocommerce_before_shop_loop_item.
     *
     * @hooked woocommerce_template_loop_product_link_open - 10
     */
    do_action( 'woocommerce_before_shop_loop_item' );

    /**
     * Hook: woocommerce_before_shop_loop_item_title.
     *
     * @hooked woocommerce_show_product_loop_sale_flash - 10
     * @hooked woocommerce_template_loop_product_thumbnail - 10
     */
    do_action( 'woocommerce_before_shop_loop_item_title' );

    /**
     * Hook: woocommerce_shop_loop_item_title.
     *
     * @hooked woocommerce_template_loop_product_title - 10
     */
    do_action( 'woocommerce_shop_loop_item_title' );

    /**
     * Hook: woocommerce_after_shop_loop_item_title.
     *
     * @hooked woocommerce_template_loop_rating - 5
     * @hooked woocommerce_template_loop_price - 10
     */
    do_action( 'woocommerce_after_shop_loop_item_title' );

    /**
     * Hook: woocommerce_after_shop_loop_item.
     *
     * @hooked woocommerce_template_loop_product_link_close - 5
     * @hooked woocommerce_template_loop_add_to_cart - 10
     */
    do_action( 'woocommerce_after_shop_loop_item' );
    ?>
</li>

Я хочу отобразить все категории в магазине в качестве заголовков со всеми их продуктами, перечисленными ниже в неупорядоченном списке.

1 Ответ

0 голосов
/ 20 февраля 2020

Что-то вроде этого должно работать для вас:

$woocommerce_category_id = get_queried_object_id();
$args = array(
   'parent' => $woocommerce_category_id
);
$terms = get_terms( 'product_cat', $args );
if ( $terms ) {
   echo '<ul class="woocommerce-categories">';
   foreach ( $terms as $term ) {
        echo '<li class="woocommerce-product-category-page">';
        woocommerce_subcategory_thumbnail( $term );
        echo '<h2>';
        echo '<a href="' .  esc_url( get_term_link( $term ) ) . '" class="' . $term->slug . '">';
        echo $term->name;
        echo '</a>';
        echo '</h2>';

        $products = get_cat_products($term);
        foreach($products as $product){
            //Output products HTML here

        }
        echo '</li>';
    }
    echo '</ul>';
}

function get_cat_products($term){
  $args = array(
       'post_type'             => 'product',
       'post_status'           => 'publish',
       'ignore_sticky_posts'   => 1,    
       'tax_query'             => array(
          array(
            'taxonomy'      => 'product_cat',
            'field' => 'slug', 
            'terms'         => $term->name,
            'operator'      => 'IN' 
          )
       )
   );
   $products = new WP_Query($args);

   return products;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...