2016-05-08 3 views
1

У меня есть сценарий php/wp, который теоретически должен печатать div с именем категории, описанием и всеми его продуктами внутри. код выглядит следующим образом:WooCommerce: продукты из категории петли странные проблемы

<?php 

$args2 = array('taxonomy' => 'product_cat', 'parent' => 9); 
$sub_cats = get_categories($args2); 

foreach($sub_cats as $sub_category) { ?> 

    <div class="treatments-description col-md-9" id="<?php echo $sub_category->term_id;?>"> 

     <h2 class="section-heading"> 
      <span class="line-behind-text"><?php echo $sub_category->name;?></span> 
     </h2> 

     <p class="section-text"> 
      OPIS: <?php echo category_description(); ?> //this part does not work too, not sure why 
     </p> 

     <h3 class="section-heading"><p class="line-behind-text">Dostępne zabiegi</p></h3> 

     <table class="treatments-table table products"> 

      <tr class="table-heading"> 
       <th class="name" id="<?php echo $sub_category->term_id;?>">Usługa</th> 
       <th>Czas trwania</th> 
       <th>Cena</th> 
       <th></th> 
      </tr> <?php 

      $name = $sub_category->name; 
      $args = array('post_type' => 'product', 
          "product_cat" => $sub_category->term_id //PROBLEM HERE 
        ); 

      $loop = new WP_Query($args); 

      if ($loop->have_posts()) { 

       while ($loop->have_posts()) : $loop->the_post(); 

        $product = new WC_Product(get_the_ID()); ?> 

        <tr> 
         <td class="name"><?php the_title(); ?><p class="small"><?php the_content(); ?></p></td> 
         <td><?php the_excerpt(); ?></td> 
         <td><?php echo $product->price; ?>zł</td> 
         <td><button class="button-product materialbutton">Rezerwuj</button> </td> 
        </tr> <?php 

       endwhile; 
      } 
      else { 

       echo __('No products found'); 
      } ?> 

      <h1>THE END</h1> <?php 
} //ALL UNCLOSED TAGS ARE GETTING CLOSED AFTERWARDS 

В настоящее время в теории должен показать дивы, как это:

  1. Категория A: 1a. Описание категории 1b. Таблица категорий
  2. Категория b: 2a. Описание категории 2b. Категория стол

Но вместо этого, результат выглядит следующим образом: Outcome

Итак, как вы видите, не только не выкладывайте страницу правильно (заказ descrption1, description2, table1, table2, ум расположение <h1>THE END</h1>), он также, похоже, не соответствует продуктам категории. То же самое происходит, когда результат Id поместить в массив

"product_cat" => 14 // доказанный идентификатор категории, содержащий сообщения

Я испытал в сор, но достаточно новое для WooCommerce. Если бы кто-нибудь мог помочь мне с этими проблемами, он был бы с удовольствием оценен.

+0

на самом деле просто точка у вас есть много открытых вопросов с нет ответов/принятых ответов? – David

ответ

1

Трудно сказать по вашим изображениям, но я почти 100%, вы не закрываете теги таблицы правильно, и то, что вы описываете, является именно тем, что произойдет в этом случае.

Проблема заключается в том, что вы открываете табличный тег на одной итерационной точке (foreach), а затем добавляете 2 строки, пока до сих пор, на следующей итерационной точке, вы добавляете тег h2 внутри тега открытой таблицы и так далее.

Браузер попытается исправить их для вас, закрыв теги, но он не перенастроит ваш html для вас, поэтому теги h будут видны над таблицей в визуализированном представлении.

См. Ниже: Таблица открывается только в том случае, если есть сообщения.Если вы хотите один открыт, когда нет сообщений, то не нужно будет закрыть таблицу, прежде чем объявить «нет сообщений не найдено» и т.д.

<?php 

$args2 = array('taxonomy' => 'product_cat', 'parent' => 9); 
$sub_cats = get_categories($args2); 

foreach($sub_cats as $sub_category) { ?> 

    <div class="treatments-description col-md-9" id="<?php echo $sub_category->term_id;?>"> 

     <h2 class="section-heading"> 
      <span class="line-behind-text"><?php echo $sub_category->name;?></span> 
     </h2> 

     <p class="section-text"> 
      OPIS: <?php echo category_description(); ?> //this part does not work too, not sure why 
     </p> 

     <h3 class="section-heading"><p class="line-behind-text">Dostepne zabiegi</p></h3> 
     <?php 

      $name = $sub_category->name; 
      $args = array('post_type' => 'product', 
          "product_cat" => $sub_category->term_id //PROBLEM HERE 
        ); 

      $loop = new WP_Query($args); 

      if ($loop->have_posts()) { 
       //only include the table if we have posts??? 

        echo '<table class="treatments-table table products">'; 

        echo '<tr class="table-heading"> 
         <th class="name" id="<?php echo $sub_category->term_id;?>">Usluga</th> 
         <th>Czas trwania</th> 
         <th>Cena</th> 
         <th></th> 
         </tr>'; 



       while ($loop->have_posts()) : $loop->the_post(); 

        $product = new WC_Product(get_the_ID()); ?> 

        <tr> 
         <td class="name"><?php the_title(); ?><p class="small"><?php the_content(); ?></p></td> 
         <td><?php the_excerpt(); ?></td> 
         <td><?php echo $product->price; ?>zl</td> 
         <td><button class="button-product materialbutton">Rezerwuj</button> </td> 
        </tr> <?php 

       endwhile; 

       echo '</table>'; 


      } 
      else { 

       echo __('No products found'); 
      } ?> 

      <h1>THE END</h1> <?php 
} //ALL UNCLOSED TAGS ARE GETTING CLOSED AFTERWARDS -- must close tags in the loop, otherwise multiple open tags!! 
+0

Ваш код работает, для всего, кроме отображения продуктов. Он дает мне «никаких продуктов», даже если он правильно отображает информацию о категории. – aln447

+0

Проблема выглядит одинаково, даже если я даю аргументам статический «product_cat» => 13, где 13 - это кошка, содержащая продукты, согласно wp-admin не менее – aln447

+0

ФИКСИРОВАННЫЙ! Проблема заключалась в том, что product_cat берет имя не id, поэтому используйте '$ args = array ('post_type' => 'product', " product_cat "=> $ sub_category-> name // ПРОБЛЕМА ЗДЕСЬ );' Работал просто отлично – aln447

1
  1. Для вашей первой проблемы, я уверен, что вам нужно заменить category_description(); на $sub_category->description; (в ниже код $sub_cat->description;)

  2. Для вас вторая проблема, я не могу проверить его, и я не совсем уверен, но вам нужно что-то более (see in here) ...

  3. Вы должны также закрыть таблицу с </table> (ближе к концу), а также </div> (в конце)


<?php 

    $args2 = array('taxonomy' => 'product_cat', 'parent' => 9); 
    $sub_cats = get_categories($args2); 

    foreach($sub_cats as $sub_cat) { ?> 
     $sub_cat_name = $sub_cat->name; 
     $sub_cat_description = $sub_cat->description; // <= Here (1) 
     $sub_cat_id = $sub_cat->term_id; 

    <div class="treatments-description col-md-9" id="<?php echo $sub_category->term_id;?>"> 

     <h2 class="section-heading"> 
      <span class="line-behind-text"><?php echo $sub_cat_name; ?></span> 
     </h2> 

     <p class="section-text"> 
      OPIS: <?php echo $sub_cat_description; ?> 
     </p> 

     <h3 class="section-heading"><p class="line-behind-text">Dostępne zabiegi</p></h3> 

     <table class="treatments-table table products"> 

      <tr class="table-heading"> 
       <th class="name" id="<?php echo $sub_cat_id; ?>">Usługa</th> 
       <th>Czas trwania</th> 
       <th>Cena</th> 
       <th></th> 
      </tr> 
     <?php 

      global $post; // Here (2) 
      $terms = get_the_terms($post->ID, 'product_cat'); 
      foreach ($terms as $term) { 
       $product_cat_id = $term->term_id; 
       // $product_cat_name = $term->name; 
       break; 
      } 
      $args = array( 
       'post_type' => 'product', 
       'product_cat' => $product_cat_id' 
      ); 

      $loop = new WP_Query($args); 

      if ($loop->have_posts()) { 

       while ($loop->have_posts()) : $loop->the_post(); 

        $product = new WC_Product(get_the_ID()); ?> 

      <tr> 
       <td class="name"><?php the_title(); ?><p class="small"><?php the_content(); ?></p></td> 
       <td><?php the_excerpt(); ?></td> 
       <td><?php echo $product->price; ?>zł</td> 
       <td><button class="button-product materialbutton">Rezerwuj</button> </td> 
      </tr> 
      <?php 
       endwhile; ?> 
     </table> 
     <?php 
      } 
      else { 
       echo __('No products found'); 
      } ?> 

     <h1>THE END</h1> 
     <?php 
     } 
     ?> 
    </div> 

 Смежные вопросы

  • Нет связанных вопросов^_^