2017-01-20 16 views
1

Wordpress Woocommerceサイト用のテンプレートを設定しています。ダイナミックメニューとして機能する製品カテゴリ、サブカテゴリ、および製品のリストを表示したいと思います。私はそれがこのように振る舞うようにしたい。Woocommerceカテゴリ、サブカテゴリ、および製品のリスト

category 1 
    -subcategory 1 
    -product 1 
    -product 2 
    -subcategory 2 
    -product 3 
category 2 
    -product 4 

私は

<?php 
$taxonomy = 'product_cat'; 
$orderby = 'name'; 
$show_count = 0; // 1 for yes, 0 for no 
$pad_counts = 0; // 1 for yes, 0 for no 
$hierarchical = 1; // 1 for yes, 0 for no 
$title = ''; 
$empty = 0; 

$args = array(
    'taxonomy' => $taxonomy, 
    'orderby' => $orderby, 
    'show_count' => $show_count, 
    'pad_counts' => $pad_counts, 
    'hierarchical' => $hierarchical, 
    'title_li' => $title, 
    'hide_empty' => $empty 
); 
?> 

<?php 
$all_categories = get_categories($args); 
foreach ($all_categories as $cat) { 

    if($cat->category_parent == 0) { 
     $category_id = $cat->term_id; 
     $thumbnail_id = get_woocommerce_term_meta($cat->term_id, 'thumbnail_id', true); 
     $image = wp_get_attachment_url($thumbnail_id); 
     echo "<ul class='category'><li>".$cat->name; 
      $args2 = array(
       'taxonomy' => $taxonomy, 
       'child_of' => 0, 
       'parent' => $category_id, 
       'orderby' => $orderby, 
       'show_count' => $show_count, 
       'pad_counts' => $pad_counts, 
       'hierarchical' => $hierarchical, 
       'title_li' => $title, 
       'hide_empty' => $empty 
      ); 
      $sub_cats = get_categories($args2); 
      if($sub_cats) { 

       foreach($sub_cats as $sub_category) { 
        echo "<ul class='subcategory'>"; 
         if($sub_cats->$sub_category == 0) { 
          echo "<li>".$sub_category->cat_name; 
          /*echo "<pre>"; 
          print_r($sub_category); 
          echo "</pre>";*/ 

          $args = array('post_type' => 'product','product_cat' => $sub_category->slug); 
          $loop = new WP_Query($args); 
          echo "<ul class='products'>"; 
           while ($loop->have_posts()) : $loop->the_post(); global $product; ?> <li> 
            <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 the_title(); ?> 
            </a></li> 
           <?php endwhile; ?> 
          </ul> 
          <?php wp_reset_query(); ?> 
         <?php 
         } else { 
          echo "</li></ul></li>"; 
         } 
         echo "</ul>"; 
        } 
       } else { 
        $args = array('post_type' => 'product', 'product_cat' => $cat->slug); 
        $loop = new WP_Query($args); 
        echo "<ul class='products'>"; 
         while ($loop->have_posts()) : $loop->the_post(); global $product; ?> <li> 
          <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 the_title(); ?> 
          </a></li> 
         <?php endwhile; ?> 
        </ul></li></ul> 
        <?php wp_reset_query(); 
       } 
      } else { 
       echo "</li></ul>"; 
     } 
} 
?> 

を望むものに近いですが、これは正しくサブカテゴリを含むカテゴリを閉じていない、次のコードを発見した、それは代わりに、次のようになります。

category 1 
    -subcategory 1 
    -product 1 
    -product 2 
    -subcategory 2 
    -product 3 
    category 2 
    -product 4 

カテゴリ2がサブカテゴリとどのように揃っているかに注目してください。

この問題のお手伝いをさせていただきます。

+0

をチェックアウトhttp://stackoverflow.com/questions/32585441/woocommerce-plugin-nested-products-for-subcategories/32602389#32602389 –

+0

私は後になっていません。私がコーディングの初心者であるので、私を抱きしめてください。そのリンクは、ウェブサイトのメニューに代わるものを用意したいカスタムページ用のようです。上記のコードは、サブカテゴリを含むカテゴリの終了タグの問題を除いて動作します。私は、カテゴリに親があるかどうかを確認するためのチェックが間違っていると思われます。 – whalecabinet

答えて

1

私は大いに騒がしくなったので、コードをこれに変更しました。

<?php 
$taxonomy = 'product_cat'; 
$orderby = 'name'; 
$order = 'ASC'; 
$show_count = 0; // 1 for yes, 0 for no 
$pad_counts = 0; // 1 for yes, 0 for no 
$hierarchical = 1; // 1 for yes, 0 for no 
$title = ''; 
$empty = 1; 

$args = array(
    'taxonomy' => $taxonomy, 
    'orderby' => $orderby, 
    'order' => $order, 
    'show_count' => $show_count, 
    'pad_counts' => $pad_counts, 
    'hierarchical' => $hierarchical, 
    'title_li' => $title, 
    'hide_empty' => $empty, 
    'parent' => 0 
); 

$all_categories = get_categories($args); 
foreach ($all_categories as $cat) { 
    $category_id = $cat->term_id; 
    $args2 = array('taxonomy' => $taxonomy,'parent' => $category_id,'hierarchical' => $hierarchical, 'orderby' => $orderby, 'order' => $order,'hide_empty' => $empty); 
$categories = get_categories($args2); 
$categories_cnt = count(get_categories($args2)); 


if ($categories_cnt != 0){ 
echo "<ul class='category'><li>".$cat->name; 
$sub_cats = get_categories($args2); 
      if($sub_cats) { 
echo "<ul>"; 
       foreach($sub_cats as $sub_category) { 
        echo "<li>".$sub_category->cat_name; 

        $args = array('post_type' => 'product','product_cat' => $sub_category->slug, 'orderby' => $orderby, 'order' => $order); 
          $loop = new WP_Query($args); 
          echo "<ul class='products'>"; 
           while ($loop->have_posts()) : $loop->the_post(); global $product; ?> <li> 
            <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 the_title(); ?> 
            </a></li> 
           <?php endwhile; ?> 
          </ul> 
          <?php wp_reset_query(); ?> 

        <?php echo "</li>"; 

        } 
echo "</ul></ul>"; 
} 
} 
else { 
    echo "<ul class='category'><li>".$cat->name; 
    $args = array('post_type' => 'product', 'product_cat' => $cat->slug, 'orderby' => $orderby, 'order' => $order); 
        $loop = new WP_Query($args); 
        echo "<ul class='products'>"; 
         while ($loop->have_posts()) : $loop->the_post(); global $product; ?> <li> 
          <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 the_title(); ?> 
          </a></li> 
         <?php endwhile; ?> 
        </ul></li></ul> 
        <?php wp_reset_query(); 
    echo "</li></ul>"; 

} 

} 
?> 

私はそれがかなり乱雑でおそらく冗長なコードを含んでいると確信していますが、今は私のために働いています。

関連する問題