Контекст / Проблема
Я ищу способ циклически просматривать дочерние категории в 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
Любые идеи о том, как я могу отобразить содержимое в этом цикле?