Как отфильтровать / запросить категорию Woocommerce с помощью поля выбора Advanced Custom Field (ACF) - PullRequest
0 голосов
/ 11 февраля 2019

Контекст / Проблема

Я ищу способ циклически просматривать дочерние категории в Woocommerce на основе поля выбора ACF.По сути, категории Woocommerce будут сгруппированы в зависимости от того, какое поле ACF выбрано администратором.Здесь https://imgur.com/a/OkKQZTu - пример, показывающий вам поле ACF в меню категории.

По сути, я хочу, чтобы результаты отображались следующим образом:

Группа категорий на основе ACF Выберите поле Выбор A:

  • Woocommerce дочерняя категория 3
  • Дочерняя категория Woocommerce 5
  • Дочерняя категория Woocommerce 6

Группа категорий на основе ACF Выберите выбор поля B:

  • Дочерняя категория Woocommerce 1
  • Woocommerce дочерняя категория 4

Группа категорий на основе ACF Выберите поле выбора C:

  • Woocommerce дочерняя категория 2

Код:

Вот мой код.С помощью этого кода я могу отобразить первый уровень дочерних категорий и их дочерних элементов.Но, опять же, я не хочу, чтобы они были сгруппированы по родительской категории.Вместо этого я хочу, чтобы они были сгруппированы по выбору поля выбора ACF.

<?php 

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

  foreach ($product_cat as $parent_product_cat)
  {

  echo '
      <ul>
        <li>
        <a href="'.get_term_link($parent_product_cat->term_id).'">'.$parent_product_cat->name.'</a>
        <ul>
          ';
          $child_args = array(
              'taxonomy'    => 'product_cat',
              'hide_empty'  => false,
              'parent'      => $parent_product_cat->term_id,
          );
  $child_product_cats = get_terms( $child_args );
  foreach ($child_product_cats as $child_product_cat)
  {
    echo '<li>-<a href="'.get_term_link($child_product_cat->term_id).'">'.$child_product_cat->name.'</a></li>';
  }

  echo '</ul>
      </li>
    </ul>';
  }

 ?>

Я смог подтвердить, что выбранное поле ACF показывает правильные результаты, используя этот код:

<?php 
$cat = get_field('associated_collection', 'category_2414'); 
echo '<p>'.($cat).'</p>'
?>

Здесь asssociated_collection - это мое поле ACF, а category_2414 - родительская категория Woocommerce.Этот код показывает правильное поле ACF, которое было выбрано.

Есть идеи о том, чего мне не хватает или как мне этого добиться?

Заранее благодарен за любую помощь.Дайте мне знать, если нужна дополнительная ясность для устранения этой проблемы.

Обновление

Я смог заставить отображаться категории с помощью этого кода, но я все же хотел бы найти способ группировкиэти категории вместе в зависимости от того, какое поле ACF (из опции «Выбрать поле») было выбрано.С этим кодом он выглядит как:

Поле ACF A

  • Название категории Woocommerce A

Поле ACF B

  • Название каталогов Woocommerce B

Поле ACF A

  • Название категории Woocommerce C

Где бы я предпочел, чтобы оно выглядело какэто:

Поле ACF A

  • Название категории Woocommerce A
  • Название категории Woocommerce C

Поле B ACF1083 *

  • Имя Woocommerce cateogry B
<?php 

  $args = array(
    'taxonomy' => 'product_cat',
    'hide_empty' => 0
  );
  $c = get_categories($args);
  $c_keep = array();
  foreach($c as  $cat){
    if (get_field('associated_collection', 'category_'.$cat->term_id)) {
      $c_keep[] = $cat; // forgot [] here
    }
  }

  foreach($c_keep as $cat){
    echo '<h1>'.get_field('associated_collection', 'category_'.$cat->term_id).'</h1>';
    echo '<p>'.$cat->name.'</p>';
  }

?>

Есть идеи?

Обновление 2

Я немного изменил свой код иСейчас я пытаюсь использовать другой маршрут прохождения через этот массив:

<?php 

function cat_loop() {

global $post;
global $wbdb;

  $args = array(
    'taxonomy' => 'product_cat',
    'hide_empty' => 0
  );

  $c = get_categories($args);
  $c_keep = array();

  foreach($c as $cat){
    if (get_field('associated_collection', 'category_'.$cat->term_id)) {
      $c_keep[] = $cat;
    }
  }

  foreach( $c_keep as $cat ) {
    $subcat_args = array(
      'post_type' => 'product',
      'tax_query' => array(
        array(
          'taxonomy' => 'associated_collection',
          'field'    => 'slug',
          'terms'    => $cat,
        ),
      ),
    );

    print_r($c_keep);

    $loop = null;

    $loop = new WP_Query( $cat_args );

    if ( $loop->have_posts() ) {

      $count = 0;

      while ( $loop->have_posts() ) {

        $loop->the_post();

        // Echo content here

        $count++;

      }

      wp_reset_query();

    } else echo 'Loop finished';

  }

}

cat_loop();

?>

Как вы можете видеть выше (где написано echo content here, я застрял на том, что делать / echo, когда у меня готов циклидти.

print_r($c_keep) показывает мне это:

Array ( [0] => WP_Term Object ( [term_id] => 2698 [name] => Patio Furniture Table Collections [slug] => patio-furniture-table-collections-category [term_group] => 0 [term_taxonomy_id] => 2698 [taxonomy] => product_cat [description] => [parent] => 2616 [count] => 320 [filter] => raw [meta_value] => 0 [cat_ID] => 2698 [category_count] => 320 [category_description] => [cat_name] => Patio Furniture Table Collections [category_nicename] => patio-furniture-table-collections-category [category_parent] => 2616 ) [1] => WP_Term Object ( [term_id] => 3165 [name] => Sol Teak Patio Furniture [slug] => sol-teak-patio-furniture-category [term_group] => 0 [term_taxonomy_id] => 3165 [taxonomy] => product_cat [description] => [parent] => 2616 [count] => 18 [filter] => raw [meta_value] => 0 [cat_ID] => 3165 [category_count] => 18 [category_description] => [cat_name] => Sol Teak Patio Furniture [category_nicename] => sol-teak-patio-furniture-category [category_parent] => 2616 ) [2] => WP_Term Object ( [term_id] => 2712 [name] => Wicker Patio Furniture (Dining Sets) [slug] => wicker-patio-furniture-dining-sets-category [term_group] => 0 [term_taxonomy_id] => 2712 [taxonomy] => product_cat [description] => [parent] => 2616 [count] => 22 [filter] => raw [meta_value] => 0 [cat_ID] => 2712 [category_count] => 22 [category_description] => [cat_name] => Wicker Patio Furniture (Dining Sets) [category_nicename] => wicker-patio-furniture-dining-sets-category [category_parent] => 2616 ) ) Loop finishedArray ( [0] => WP_Term Object ( [term_id] => 2698 [name] => Patio Furniture Table Collections [slug] => patio-furniture-table-collections-category [term_group] => 0 [term_taxonomy_id] => 2698 [taxonomy] => product_cat [description] => [parent] => 2616 [count] => 320 [filter] => raw [meta_value] => 0 [cat_ID] => 2698 [category_count] => 320 [category_description] => [cat_name] => Patio Furniture Table Collections [category_nicename] => patio-furniture-table-collections-category [category_parent] => 2616 ) [1] => WP_Term Object ( [term_id] => 3165 [name] => Sol Teak Patio Furniture [slug] => sol-teak-patio-furniture-category [term_group] => 0 [term_taxonomy_id] => 3165 [taxonomy] => product_cat [description] => [parent] => 2616 [count] => 18 [filter] => raw [meta_value] => 0 [cat_ID] => 3165 [category_count] => 18 [category_description] => [cat_name] => Sol Teak Patio Furniture [category_nicename] => sol-teak-patio-furniture-category [category_parent] => 2616 ) [2] => WP_Term Object ( [term_id] => 2712 [name] => Wicker Patio Furniture (Dining Sets) [slug] => wicker-patio-furniture-dining-sets-category [term_group] => 0 [term_taxonomy_id] => 2712 [taxonomy] => product_cat [description] => [parent] => 2616 [count] => 22 [filter] => raw [meta_value] => 0 [cat_ID] => 2712 [category_count] => 22 [category_description] => [cat_name] => Wicker Patio Furniture (Dining Sets) [category_nicename] => wicker-patio-furniture-dining-sets-category [category_parent] => 2616 ) ) Loop finishedArray ( [0] => WP_Term Object ( [term_id] => 2698 [name] => Patio Furniture Table Collections [slug] => patio-furniture-table-collections-category [term_group] => 0 [term_taxonomy_id] => 2698 [taxonomy] => product_cat [description] => [parent] => 2616 [count] => 320 [filter] => raw [meta_value] => 0 [cat_ID] => 2698 [category_count] => 320 [category_description] => [cat_name] => Patio Furniture Table Collections [category_nicename] => patio-furniture-table-collections-category [category_parent] => 2616 ) [1] => WP_Term Object ( [term_id] => 3165 [name] => Sol Teak Patio Furniture [slug] => sol-teak-patio-furniture-category [term_group] => 0 [term_taxonomy_id] => 3165 [taxonomy] => product_cat [description] => [parent] => 2616 [count] => 18 [filter] => raw [meta_value] => 0 [cat_ID] => 3165 [category_count] => 18 [category_description] => [cat_name] => Sol Teak Patio Furniture [category_nicename] => sol-teak-patio-furniture-category [category_parent] => 2616 ) [2] => WP_Term Object ( [term_id] => 2712 [name] => Wicker Patio Furniture (Dining Sets) [slug] => wicker-patio-furniture-dining-sets-category [term_group] => 0 [term_taxonomy_id] => 2712 [taxonomy] => product_cat [description] => [parent] => 2616 [count] => 22 [filter] => raw [meta_value] => 0 [cat_ID] => 2712 [category_count] => 22 [category_description] => [cat_name] => Wicker Patio Furniture (Dining Sets) [category_nicename] => wicker-patio-furniture-dining-sets-category [category_parent] => 2616 ) ) Loop finished

Любые идеи о том, как я могу отобразить содержимое в этом цикле?

...