Получение одной или нескольких подкатегорий в WordPress — возможно ли объединение массивов?

Я написал некоторый код, который использует функцию WordPress get_terms для отображения списка подкатегорий для определенной пользователем категории, а также показывает соответствующий эскиз для каждой подкатегории. Насколько мне известно, не существует функции WP для отображения всех дочерних категорий у нескольких родителей, поэтому мне было интересно, возможно ли объединить результаты двух или более результатов get_terms?

Код, который я написал до сих пор, работает нормально для get_terms только из одной родительской категории, но я не уверен, куда идти дальше …

function get_wc_child_cat_thumbs($catParent, $listClassName) {

// Our wordpress get_terms arguments
$args = array(
'number'        => $number,
'orderby'       => $orderby,
'order'         => $order,
'hide_empty'    => $hide_empty,
'include'       => $ids,
'parent'        => $catParent,
);

// Get the terms
$product_categories = get_terms( 'product_cat', $args );

// See if any results are returned
$count = count($product_categories);

// If there are, populate a list with the subcategories details
if ( $count > 0 ){
echo '<ul class="'.$listClassName.'">';
foreach ( $product_categories as $product_category ) {

// Get the thumbnail id for the subcategory
$thumbnail_id = get_woocommerce_term_meta( $product_category->term_id, 'thumbnail_id', true );

// Show the results…
echo '<li>'.wp_get_attachment_image( $thumbnail_id ).'<br />'.$product_category->term_id.' - <a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</a></li>';

//echo $image = wp_get_attachment_image( $thumbnail_id );
}
echo '</ul>';

} // END if ( $count > 0 ){

} // END function get_wc_child_cat_thumbs`

Можно ли изменить $catParent аргумент, так что он принимает либо одиночные значения или значения массива и добавить куда-нибудь массив_мердж?

0

Решение

Будет ли это работать?

$product_categories = array();
foreach ($catParent as $parent) {
$args = array(
'number'        => $number,
'orderby'       => $orderby,
'order'         => $order,
'hide_empty'    => $hide_empty,
'include'       => $ids,
'parent'        => $parent,
);

// Get the terms
$categories = get_terms('product_cat', $args );
foreach ($categories as $category) {
$product_categories[] = $category;
}
}

при условии, $catParent это массив

редактировать второй foreach

foreach ( $product_categories as $product_category ) {
// Get the thumbnail id for the subcategory
$thumbnail_id = get_woocommerce_term_meta( $product_category->term_id, 'thumbnail_id', true );

// Show the results…
echo '<li>'.wp_get_attachment_image( $thumbnail_id ).'<br />'.$product_category->term_id.' - <a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</a></li>';

//echo $image = wp_get_attachment_image( $thumbnail_id );
}
1

Другие решения

Мне удалось разобрать проблему (в буквальном смысле) с большой помощью @RST. В конце я объединил несколько массивов и отсортировал результаты в алфавитном порядке, используя usort и значение имени из массива в качестве сравнения. Вот готовый код …

// Used instead of brands plugin - was duplicating content
function get_multiple_woocommerce_child_cats($catParent, $listClassName) {

$product_categories = array();
foreach ($catParent as $parent) {
$args = array(
'number'        => $number,
'orderby'       => $orderby,
'order'         => $order,
'hide_empty'    => $hide_empty,
'include'       => $ids,
'parent'        => $parent,
);

// Get the terms
$product_categories[] = get_terms( 'product_cat', $args );
}

// See if any results were returned
$count = count($product_categories);

// If there are, populate a list with the subcategories details
if ( $count > 0 ){

// Merge the separate product category arrays into one big array
$mergedcats = call_user_func_array('array_merge', $product_categories);

// Function to sort the array by name value. Need to use the class operator in WordPress $a->name instead of $a['name'] otherwise we get an error
function sorteed($a, $b) {
return strcmp($a->name, $b->name);
}

// Sort the big array by the category name value
usort($mergedcats, sorteed);

// For testing…
//echo "<pre>";
//print_r($result);
//echo"</pre>";

// Print out the results in the desired format
echo '<ul class="'.$listClassName.'">';
foreach ( $mergedcats as $product_category ) {

// Get the thumbnail id for the subcategory
$thumbnail_id = get_woocommerce_term_meta( $product_category->term_id, 'thumbnail_id', true );

// Show the results…
echo '  <li>
<div>
<a href="' . get_term_link( $product_category ) . '">'.wp_get_attachment_image( $thumbnail_id ).'</a>
</div>
<p>Cat id is - '.$product_category->term_id.'</p><p> Cat name is - <a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</a></p>
</li>';
} // END foreach

echo '</ul>';

} else {}

} // END function get_wc_child_cat_thumbs
0