当前位置: 首页 > 知识库问答 >
问题:

仅在Woocommerce wc_get_loop_prop product循环中包含某些类别

东郭赞
2023-03-14

我正在使用归档产品构建自定义类别归档模板。php作为基础。我需要做的是使用产品类别的ID(在Woocommerce中为product\u cat)仅显示某些类别的产品。但是我想使用wc\u get\u products而不是WP\u查询post循环,请注意:https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query

“wc_get_products和wc_Product_Query提供了一种检索产品的标准方法,这些产品可以安全使用,并且不会因未来WooCommerce版本中的数据库更改而中断。在将来的WooCommerce版本中,随着数据移向自定义表以获得更好的性能,生成自定义WP_查询或数据库查询可能会中断代码。”

我复制了存档产品。php将其添加到my child主题中的woocommerce文件夹中,并将其重命名为自定义类别存档。php,它的头是

/*
Template Name: Custom Category Archive Template
*/

因此,我可以选择它作为页面编辑器中的页面模板。

这是新模板自定义类别存档中的原始Woocommerce产品循环。php

if ( woocommerce_product_loop() ) {

    /**
     * Hook: woocommerce_before_shop_loop.
     *
     * @hooked woocommerce_output_all_notices - 10
     * @hooked woocommerce_result_count - 20
     * @hooked woocommerce_catalog_ordering - 30
     */
    do_action( 'woocommerce_before_shop_loop' );

    woocommerce_product_loop_start();

    if ( wc_get_loop_prop( 'total' ) ) {
        while ( have_posts() ) {
            the_post();

            /**
             * Hook: woocommerce_shop_loop.
             */
            do_action( 'woocommerce_shop_loop' );

            wc_get_template_part( 'content', 'product' );
        }
    }

    woocommerce_product_loop_end();

如何使用类别ID修改循环以仅包括产品类别(product\u cat)中的产品?这就是新的WP_查询post循环仅包括产品类别123457899中的产品的方式:

$args = array(
   'post_type' => 'product',
   'post_status' => 'publish',
   'posts_per_page' => '-1',
   'tax_query' => array(
        array(
            'taxonomy'  => 'product_cat',
            'terms'     => array('12,345,7899'),   // including categories by ID
            'operator'  => 'IN',
        )
 

如何在我的自定义类别存档中的wc\u get\u loop\u prop('total')发布产品循环中包括产品类别,如12345、7899。php模板是否仅显示这三个产品类别中的产品?

共有2个答案

鞠嘉志
2023-03-14

你应该试着像-

$args = array(
    'post_type' => 'product',
    'post_status' => 'publish',
    'posts_per_page' => '-1',
    'tax_query' => array(
         array(
             'taxonomy'  => 'product_cat',
             'terms'     => array(12,345,7899),   // including categories by ID
             'operator'  => 'IN',
         )
    )
);
$loop = new WP_Query( $args ); 
    
while ( $loop->have_posts() ) : $loop->the_post(); 
    print the_title(); 
    the_excerpt(); 
endwhile;

wp_reset_postdata(); 
周祺
2023-03-14

参考此大纲https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/,这是使用wc\u get\u产品的类别存档的基本循环:

defined( 'ABSPATH' ) || exit;

get_header( 'shop' );

do_action( 'woocommerce_before_main_content' );

?>

<?php


  if(!function_exists('wc_get_products')) {
    return;
  }


  $cat_terms = get_field('add_categories_custom_template', $term->term_id);


  $ordering              = WC()->query->get_catalog_ordering_args();
  $ordering['orderby']   = array_shift(explode(' ', $ordering['orderby']));
  $ordering['orderby']   = stristr($ordering['orderby'], 'price') ? 'meta_value_num' : $ordering['orderby'];
 
  $cat_products         = wc_get_products(array(
    'stock_status'      => 'instock',
    'visibility'        => 'visible',
    'status'            => 'publish',
    'limit'             => -1,
    'paginate'          => true,
    'return'            => 'ids',
    'orderby'           => $ordering['orderby'],
    'order'             => $ordering['order'],

    'tax_query'             => array(
        array(
            'taxonomy'      => 'product_cat',
            'field'         => 'term_id',
            'terms'         => array('123,45,6789'),
            'operator'      => 'IN',
        )
   )

  ));


 wc_set_loop_prop('total', $cat_products->total);

  if($cat_products) {
    do_action('woocommerce_before_shop_loop');

    echo '<div id="container">';

      foreach($cat_products->products as $cat_product) {

        $post_object = get_post($cat_product);
        setup_postdata($GLOBALS['post'] =& $post_object);

        echo '<div '; wc_product_class( ' ', $product ); echo '>'; 

            do_action( 'woocommerce_before_shop_loop_item' );
            do_action( 'woocommerce_before_shop_loop_item_title' );
            do_action( 'woocommerce_shop_loop_item_title' );
            do_action( 'woocommerce_after_shop_loop_item_title' );
            do_action( 'woocommerce_after_shop_loop_item' );

        echo '</div>';

      }
      wp_reset_postdata();

echo '</div>';

    do_action('woocommerce_after_shop_loop');
  } else {
    do_action('woocommerce_no_products_found');
  }


do_action( 'woocommerce_after_main_content' );

 类似资料:
  • 问题内容: 我有一个dict包含大量条目的条目。我只对其中几个感兴趣。有没有一种简单的方法可以将其他所有元素都修剪掉? 问题答案: 构建一个新的字典: 使用字典理解。 如果使用缺少它们的版本(例如,Python 2.6和更早版本),请使其成为。一样,尽管丑陋。 请注意,这与jnnnnn的版本不同,对于任何大小的,都具有稳定的性能(仅取决于your_keys的数量)。在速度和内存方面。由于这是一个生

  • 我为我的AAR库做了C#绑定,但是扩展支持片段的片段不包括在绑定中。另外,返回类型为支持片段的其他类的方法也不包括在内。 我的继承层次结构:ScreenAFragment(公共)->PermissionsRequesterFragment(公共抽象)->BaseFragment(公共抽象)->Fragment(Android.support.v4.app包) 有人能告诉我这种行为的原因,并告诉我如

  • 我这里有这个html 我想检查span类是否包含值2013。我应该如何编写xpath? 这些是我到目前为止尝试过的,根据Firepath,它们要么无效,要么没有匹配的节点。

  • 问题内容: 作为测试的一部分,该系统应该确定用于打开网站的设备是移动设备还是普通台式机。 我不断收到错误: “ InvalidSelectorError:无法使用xpath表达式// * [包含(@class,is-mobile … 萤火虫的属性: 我的测试: 有人可以告诉我正确的XPath应该是什么吗? 问题答案: 您似乎缺少右括号和右括号: 更改此: 变成这个: 附带说明一下,请考虑到此代码还

  • 问题内容: 在Python中,如何检查字符串是否仅包含某些字符? 我需要检查仅包含a..z,0..9和的字符串。(句号),没有其他字符。 我可以遍历每个字符并检查字符是a..z还是0..9或。但这会很慢。 我现在不清楚如何使用正则表达式进行操作。 这个对吗?您可以提出更简单的正则表达式还是更有效的方法? 问题答案: 决赛(?) 答案,包装在函数中,带有注释的交互式会话: 注意:在此答案中还有一个比

  • 你好,我看到的日志信息只在某些类,不知道在哪里看。是我的原木模式搞错了还是?这是我的log4j配置,我将它与sfl4j一起使用: null 我创建的记录器是这样的,类字段: 和日志记录,如: 有什么想法吗? 更新 根据Petar Minchev的回答改为信息,但我仍然没有得到任何东西。 更新II 现在,在添加了一些依赖项之后,它可以在一些类上工作(仍然不能在其他一些类上工作)。有一些实现runna