从特定类别获取 WooCommerce 产品

Posted

技术标签:

【中文标题】从特定类别获取 WooCommerce 产品【英文标题】:Get WooCommerce products from specific category 【发布时间】:2021-11-07 07:44:54 【问题描述】:

我正在尝试插入 WooCommerce 元素以将特定类别中的“产品”(课程)显示到页面中。

我还必须为这个特定类别隐藏这些产品,它按预期工作。我刚刚在functions.php中添加了一个过滤器,是吗:

/*
 * Exclude "packages" category from "Archive Products" on page 811
 * Ref. URL: https://docs.woocommerce.com/document/exclude-a-category-from-the-shop-page/
 */
function exclude_category_archive_products( $q ) 
   $tax_query = (array) $q->get( 'tax_query' );

    $tax_query[] = array(
           'taxonomy' => 'product_cat',
           'field' => 'slug',
           'terms' => array( 'packages' ),
           'operator' => 'NOT IN'
    );


    $q->set( 'tax_query', $tax_query );


if( $current_post_id != "811" ) 
    add_filter( 'woocommerce_product_query', 'exclude_category_archive_products' );

/* END Exclude "packages" category from "Archive Products" on page 811 */

我一直在寻找实现相反目标的方法,但我没有找到任何“从今年开始或接近尾声”的东西。我尝试使用“IN”或“=”运算符,但没有用(它显示所有内容):

/*
 * Display "packages" category only
 */
function show_only_category_in_page( $q ) 
    var_dump("It reaches the function");
    $tax_query = (array) $q->get( 'tax_query' );

    $tax_query[] = array(
           'taxonomy' => 'product_cat',
           'field' => 'slug',
           'terms' => array( 'packages' ),
           'operator' => '='
    );

    $q->set( 'tax_query', $tax_query );

if( $current_post_id == "811" ) 
    var_dump("It reaches the page");
    add_filter( 'woocommerce_product_query', 'show_only_category_in_page' );

/*  END Display "packages" category only */

前面的代码只写了string(23) "It gets reachs the page"。我做错了什么?

【问题讨论】:

【参考方案1】:

你应该试试这个,因为你可以从特定类别中获得产品

解决方案 1:

$prod_categories = array(1, 2,3);
$product_args = array(
  'numberposts' => $limit,
  'post_status' => array('publish', 'pending', 'private', 'draft'),
  'post_type' => array('product', 'product_variation'),
  'orderby' => 'ID',
  'suppress_filters' => false,
  'order' => 'ASC',
  'offset' => 0
);

if (!empty($prod_categories)) 
   $product_args['tax_query'] = array(
      array(
        'taxonomy' => 'product_cat',
        'field' => 'id',
        'terms' => $prod_categories,
        'operator' => 'IN',
   ));
 

 $products = get_posts($product_args);

1、2、3 是您的类别 ID。

解决方案 2

创建自定义页面并显示特定类别的产品:

<?php
/**
* Template Name: Courses template
*
*/
defined( 'ABSPATH' ) || exit;


get_header();
?>
    <div id="content" class="content" role="main">

        <ul class="products">
            <?php
                $args = array( 
                    'post_type' => 'product', 
                    'posts_per_page' => -1, 
                    'product_cat' => 'clothing', // Category slug "clothing"
                    'orderby' => 'rand' 
                );
                $loop = new WP_Query( $args );
                while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>
            
                    <h2>Courses</h2>
            
                        <li class="product">    
            
                            <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>">
            
                                <?php woocommerce_show_product_sale_flash( $post, $product ); ?>
            
                                <?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'shop_catalog'); else echo '<img src="'.woocommerce_placeholder_img_src().'"    />'; ?>
            
                                <h3><?php the_title(); ?></h3>
            
                                <span class="price"><?php echo $product->get_price_html(); ?></span>                    
            
                            </a>
            
                            <?php woocommerce_template_loop_add_to_cart( $loop->post, $product ); ?>
            
                        </li>
            
            <?php endwhile; ?>
            <?php wp_reset_query(); ?>
        </ul>
    </div><!-- #content -->

<?php get_footer(); ?>

步骤:

    转到您的活动主题创建一个新页面,如 course-tpl.php 将上述代码复制并粘贴到您的自定义页面 course-tpl.php 中,并将类别 slug“服装”更改/替换为“您的类别 slug”并保存。 打开仪表板 - 转到页面和“添加新”页面,输入页面标题并分配“课程模板”并保存 打开新页面 相应地更新/管理页面 CSS 和 HTML。

【讨论】:

以上是关于从特定类别获取 WooCommerce 产品的主要内容,如果未能解决你的问题,请参考以下文章

在 WooCommerce 中为特定产品类别自定义“添加到购物车”按钮

从 Woocommerce 相关产品中排除特定产品类别

如何将 wordpress/php 功能应用于特定的产品类别

ajax 上的 JS 警报添加到购物车以获取 Woocommerce 中的特定产品类别计数

如何在woocommerce中获取特定类别的所有产品?

在 WooCommerce 产品的挂钩函数中检查产品类别