Я пытаюсь добавить пользовательский контент перед содержимым магазина, но только при просмотре продуктов в определенной категории с дочерними элементами этой категории.
Категории: основная категория - 'события', дочерние категории - 'семинар', 'курс' и 'обучение'< /эм>.
add_action( 'woocommerce_before_shop_loop', 'eventsTerms', 18);
function eventsTerms() {
$term = get_term_by('name', 'events', 'product_cat');
$term_id = $term->term_id;
$taxonomyName = 'product_cat';
$termChildren = get_term_children( $term_id, $taxonomyName );
foreach ( $termChildren as $child ) {
$_term = get_term_by( 'id', $child, $taxonomyName );
$childTerms= ', "' . '' . $_term->name . '"';
echo $childTerms; // only to see is ok
}
if ( is_product_category( array("events", $childTerms) ) ) {
global $product;
wp_list_categories(
array(
'show_option_all' => 'show all',
'taxonomy' => 'product_cat',
'style' => 'none',
'separator' => '',
'hide_empty' => 0,
));
}
}
$childTerms
возвращает имена всех дочерних категорий, поэтому я хочу использовать условный тег is_product_category
с массивом, но мой код по-прежнему работает только с основной категорией «события».
Где ошибка?
ИЗМЕНИТЬ 1
Хорошо, я думал, что причина, по которой он не работает, заключается в том, что implode
нельзя использовать в is_product_category()
аргументах. Итак, я пытался с json_encode
вот так:
add_action( 'woocommerce_before_shop_loop', 'eventsTerms', 18);
function eventsTerms() {
$term = get_term_by('name', 'events', 'product_cat');
$term_id = $term->term_id;
$taxonomyName = 'product_cat';
$termChildren = get_term_children( $term_id, $taxonomyName );
foreach ( $termChildren as $child ) {
$_term = get_term_by( 'id', $child, $taxonomyName );
$childTerms[] = " '".$_term->name."'";
}
$x = implode(",", $childTerms);
$y = json_encode($x);
echo $y; // output as " 'seminarium', 'course', 'training'"
$y2 = preg_replace('/"([a-zA-Z]+[a-zA-Z0-9_]*)":/','$1:', $x); // removing qutes by preg_replace
echo $y2; // output as 'seminarium', 'course', 'training'
if ( is_product_category( array('events', $y) ) ) {
global $product;
wp_list_categories(
array(
'show_option_all' => 0,
'taxonomy' => 'product_cat',
'style' => 'none',
'separator' => '',
'hide_empty' => 0,
'child_of' => $term_id,
));
}
}