Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress-如何从其他特定类别中的产品中获取类别_Wordpress_Woocommerce_Product_Categories - Fatal编程技术网

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

Wordpress-如何从其他特定类别中的产品中获取类别,wordpress,woocommerce,product,categories,Wordpress,Woocommerce,Product,Categories,我有服装产品。一种产品有多个类别,如“性别”(“男性”或“女性”)和“类型”(如“裤子”、“衬衫”等) 我想列出所有类别和子类别的“类型”从产品中存在的“男子”类别 “类型”类别的ID:1696 $args = array( 'taxonomy' => 'product_cat', 'orderby' => 'title', 'order' => 'ASC', 'child_of' => 1696, ); $categories = get_t

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

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

“类型”类别的ID:1696

$args = array(
  'taxonomy' => 'product_cat',
  'orderby'  => 'title',
  'order'    => 'ASC',
  'child_of'   => 1696,
);
$categories = get_terms( $args );
print_r($categories);
该代码为我提供了1696下的所有类别,但我只想从同样属于“男性”类别的产品中获得“类型”类别

我明白了吗


非常感谢您的帮助。

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

从文件中:

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

$child_cats=array();
$parent_cats=数组(1696,{另一个类别id});
$args=数组(
“分类法”=>“产品分类”,
'orderby'=>'title',
“订单”=>“ASC”,
'child\u of'=>$parent\u cat
);
foreach($parent\u cat作为$parent\u cat)
{
$child_cats=array_merge($child_cats,get_terms($args));
};
印刷品(儿童猫);

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

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

从文件中:

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

$child_cats=array();
$parent_cats=数组(1696,{另一个类别id});
$args=数组(
“分类法”=>“产品分类”,
'orderby'=>'title',
“订单”=>“ASC”,
'child\u of'=>$parent\u cat
);
foreach($parent\u cat作为$parent\u cat)
{
$child_cats=array_merge($child_cats,get_terms($args));
};
印刷品(儿童猫);

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

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

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

我正在循环每一个产品,如果它们属于性别类别(“女性”和“男性”),我会将它们放入数组中

之后,我将对数组进行格式化,以获得这个类别结构(每个性别一个数组):数组('term_id'=>'name_id','term_id'=>'name_id','term_id'=>'name_id')

在此之后,我将遍历所有衣服类别,并查看之前创建的数组中是否存在此类别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_菜单项功能:

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;
}

再次感谢您的帮助。:)

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

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

我正在循环每一个产品,如果它们属于性别类别(“女性”和“男性”),我会将它们放入数组中

之后,我将对数组进行格式化,以获得这个类别结构(每个性别一个数组):数组('term_id'=>'name_id','term_id'=>'name_id','term_id'=>'name_id')

在此之后,我将遍历所有衣服类别,并查看之前创建的数组中是否存在此类别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_菜单项功能:

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;
}

再次感谢您的帮助。:)

我不明白你建议的代码在做什么。而带有“'child\u of'=>$parent\u cat”的$args数组不应该在foreach循环中?基本上,它会得到一个包含所有所需子类别的数组。我们在循环中调用
$args
。如果您不理解它,那没关系,一旦您获得了更多的编码经验,您就会理解它。你不必使用我提供给你的代码。还有其他方法可以做同样的事情,您可以编写两页长的代码来实现同样的事情!我不明白你建议的代码在做什么。而带有“'child\u of'=>$parent\u cat”的$args数组不应该在foreach循环中?基本上,它会得到一个包含所有所需子类别的数组。我们在循环中调用
$args
。如果您不理解它,那没关系,一旦您获得了更多的编码经验,您就会理解它。你不必使用我提供给你的代码。还有其他方法可以做同样的事情,您可以编写两页长的代码来实现同样的事情!