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

Wordpress如何从其他特定类别的产品中获取类别

斜俊
2023-03-14

我有服装产品。一种产品有多个类别,如“性别”(“男性”或“女性”)和“类型”(如“裤子”、“衬衫”等)。

我想列出所有类别和子类别的“类型”从产品中存在的“男子”类别。

"type"类别的ID: 1696

$args = array(
  'taxonomy' => 'product_cat',
  'orderby'  => 'title',
  'order'    => 'ASC',
  'child_of'   => 1696,
);
$categories = get_terms( $args );
print_r($categories);

这段代码给了我1696下的所有类别,但我只想从也属于“男性”类别的产品中获得“类型”类别。

我明白了吗?

非常感谢你的帮助。

共有2个答案

狄溪叠
2023-03-14

谢谢你的帮助,但这不是我需要的。

我找到了实现我想要的东西的方法。一定有更好的方法,但我是这样做的:

我循环每个产品,如果它们属于性别类别(“女性”和“男性”),就把它们放在数组中。

    $categories_femme = array(); // 1718
    $categories_homme = array(); // 1700
    
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1
    );
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ): while ( $loop->have_posts() ): $loop->the_post();

      global $product;

      $p_id = $product->get_id();
      
      // FEMME
      if( has_term( 1718, 'product_cat' ) ) {
        $categories_femme[] = wp_get_post_terms($p_id, 'product_cat');
      }
      // HOMME
      if( has_term( 1700, 'product_cat' ) ) {
        $categories_homme[] = wp_get_post_terms($p_id, 'product_cat');
      }

    endwhile; endif; wp_reset_postdata();

之后,我格式化数组以获得类别的结构(每个性别一个数组):数组('term_id'=

    $categories_femme_formated = array();
    foreach ($categories_femme as $categorie_femme) {
      foreach ($categorie_femme as $categoriefemme) {
        $categories_femme_formated[$categoriefemme->term_id] = $categoriefemme->name;
      }
    }
    
    $categories_homme_formated = array();
    foreach ($categories_homme as $categorie_homme) {
      foreach ($categorie_homme as $categoriehomme) {
        $categories_homme_formated[$categoriehomme->term_id] = $categoriehomme->name;
      }
    }

在此之后,我将遍历所有衣服类别,并查看之前创建的数组中是否存在此类别ID。如果是,我将把这个类别添加到菜单中。

    $args = array(
      'taxonomy' => 'product_cat',
      'hide_empty' => false,
      'parent'   => 1696
    );
    $product_cat = get_terms( $args );

    // FEMME
    $count_order = 100;
    foreach ($product_cat as $parent_product_cat)
    {
      $p_id = $parent_product_cat->term_id;
      if (array_key_exists($p_id, $categories_femme_formated)) {
        $count_order++;
        $menu_items[] = _custom_nav_menu_item( $categories_femme_formated[$p_id], get_term_link($p_id), $count_order, 11407 );
        
        $child_args = array(
                'taxonomy' => 'product_cat',
                'hide_empty' => false,
                'parent'   => $parent_product_cat->term_id
            );
        $child_product_cats = get_terms( $child_args );
        $parent_order = $count_order;
        foreach ($child_product_cats as $child_product_cat)
        {
          $c_id = $child_product_cat->term_id;
          if (array_key_exists($c_id, $categories_femme_formated)) {
            $count_order++;
            $child_menu_id = 1000000 + $parent_order + 11407;
            $menu_items[] = _custom_nav_menu_item( $categories_femme_formated[$c_id], get_term_link($c_id), $count_order, $child_menu_id );
            
          }
        }
      }
    }
    
    // HOMME
    $count_order = 100;
    foreach ($product_cat as $parent_product_cat)
    {
      $p_id = $parent_product_cat->term_id;
      if (array_key_exists($p_id, $categories_homme_formated)) {
        $count_order++;
        $menu_items[] = _custom_nav_menu_item( $categories_homme_formated[$p_id], get_term_link($p_id), $count_order, 11408 );
        
        $child_args = array(
                'taxonomy' => 'product_cat',
                'hide_empty' => false,
                'parent'   => $parent_product_cat->term_id
            );
        $child_product_cats = get_terms( $child_args );
        $parent_order = $count_order;
        foreach ($child_product_cats as $child_product_cat)
        {
          $c_id = $child_product_cat->term_id;
          if (array_key_exists($c_id, $categories_homme_formated)) {
            $count_order++;
            $child_menu_id = 1000000 + $parent_order + 11408;
            $menu_items[] = _custom_nav_menu_item( $categories_homme_formated[$c_id], get_term_link($c_id), $count_order, $child_menu_id );
            
          }
        }
      }
    }

为了让每个人都能理解,我在一个函数中调用了以下代码:

add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' );

这里是_custom_nav_menu_item函数:

function _custom_nav_menu_item( $title, $url, $order, $parent = 0 ){
  $item = new stdClass();
  $item->ID = 1000000 + $order + $parent;
  $item->db_id = $item->ID;
  $item->title = $title;
  $item->url = $url;
  $item->menu_order = $order;
  $item->menu_item_parent = $parent;
  $item->type = '';
  $item->object = '';
  $item->object_id = '';
  $item->classes = array();
  $item->target = '';
  $item->attr_title = '';
  $item->description = '';
  $item->xfn = '';
  $item->status = '';
  $item->icon = '';
  $item->nolink = '';
  $item->hide = '';
  $item->mobile_hide = ''; 
  $item->cols = ''; 
  $item->tip_label = '';
  $item->popup_type = 'wide';
  $item->popup_pos = '';
  $item->popup_cols = 'col-4';
  $item->popup_max_width = '';
  $item->popup_bg_image = '';
  $item->popup_bg_pos = ''; 
  $item->popup_bg_repeat = ''; 
  $item->popup_bg_size = ''; 
  $item->popup_style = '';
  $item->block = '';
  $item->preview = '';
  $item->preview_fixed = ''; 
  $item->current = '';
  $item->current_item_ancestor = '';
  $item->current_item_parent = '';
  return $item;
}

再次感谢您的帮助。:)

傅正阳
2023-03-14

由于wordpress一次只允许一个id用于参数的child\u,因此您可以创建一个自定义数组,并为所需的每个父类别运行get\u terms

文件中:

  • child\u of-(int)术语ID,用于检索的子术语。如果传递了多个分类法,则忽略$child\u of。默认值为0
    wp\u术语\u查询

$child_cats = array();

$parent_cats = array(1696, {the other category id});

$args = array(
  'taxonomy' => 'product_cat',
  'orderby'  => 'title',
  'order'    => 'ASC',
  'child_of'=> $parent_cat
);

foreach ($parent_cats as $parent_cat) 
{
    $child_cats = array_merge($child_cats, get_terms($args));
};

print_r($child_cats);

如果这就是你要找的,请告诉我!

 类似资料:
  • 我试图通过WoodPress主题中的一个函数从WooCommerce获取产品类别 上面的代码返回一些产品,但是产品类别。 当我包括

  • 我想从一个类别中获得新产品,所以我试图改变控制器。 在prestashop 1.7中 里面有这个功能 我把它改成了 但它仍在展示所有产品,而不是该类别的产品。 我决定用不同的方式, 在产品中。我写的php 在我的控制器中,我从product controller中的新函数中获取产品id,然后获取产品属性 它正在工作,但我认为与相比,操作太多了。

  • 我正在开发一个电子商务网站,我使用三个表来管理产品和类别。 我需要一个或多个带有实体框架的linq查询来获得母类别列表、子类别列表和相关产品列表。 有一个类别表,如: Id NameCat ParentId 有一个products表,如: Id名称实时信息等。 有一个product-category表,如: Id categoryId productId sortOrder 这是我的viewmod

  • 基于在Wordpress菜单中按名称ASC对上一个问题的答案代码中的产品类别子菜单项进行排序,我能够在Wordpress导航菜单中自动将子类别显示为某些产品类别的菜单子项。 我的问题是:是否可以隐藏空的子类别(子菜单项)? 如果可能的话,还可以隐藏只包含一个已售完产品的类别。

  • 我至少有4个父类别,每个父类别都有一个子类别。 WordPress中的类别如下所示: > 利丁ö(父类别) Direktåtkomst Förrådslänga(子类别) 1kbm(产品) 1.5千伏安(产品) Nacka(父类别) 样本(子类别) aa(产品) bbb(产品) 我想查询WordPress中的产品,它们应该按类别分组。 这是我当前的代码: 我认为上面的代码不正确,因为每个分页都显示

  • 对于我的WC产品页面,我需要向body标记添加一个类,以便执行一些自定义样式。这是我为这个创建的函数。。。 …但是我怎么才能拿到猫的身份证呢?