Как правило, я в состоянии выполнить каждое из моих требований WP самостоятельно, но этот оказался немного сложным.
Дело в том, что мне нужно скрыть определенные категории из виджетов категории продуктов на основе в категории, в которой я нахожусь.
Пример: когда я нахожусь в категории A, я хочу показать категории A, B, C, D, но не E. Однако, когда я нахожусь в категории B, я хочу показать категории A, B, C, D и E. Тогда, скажем, я нахожусь в категории C и хочу показывать только категории C и D.
Я нашел следующий код
add_filter( 'woocommerce_product_categories_widget_args', 'woo_product_cat_widget_args' );
function woo_product_cat_widget_args( $cat_args ) {
$cat_args['exclude'] = array('15');
return $cat_args;
}
Что я хочу сделать с помощью этого кода добавить несколько строк, где я бы определил, что, например, когда я открываю ID категории 1, не отображаются идентификаторы 2,3,4. Затем в следующей строке будет указано, какие идентификаторы не следует отображать для идентификатора 2, затем для, скажем, идентификатора 4 и т. Д.
/ * EDIT Удивительный пользователь stackoverflow помог мне, создав Код вы можете увидеть в его посте ниже. Однако, как мы выяснили, приведенный выше пример работает только для встроенного виджета категорий продуктов WP.
Это привело меня к выводу, что используемый виджет категорий продуктов создан специально для темы Я использую и, очевидно, он использует этот код для работы:
if ( !function_exists( 'getbowtied_megamenu_output_shop_icons' )):
/**
* Build the layout for the "Shop Icons" type megamenu
*
* @param int $theID id of the menu item
*
* @return html
*/
function getbowtied_megamenu_output_shop_icons( $theID, $cat= false) {
if ( !GETBOWTIED_WOOCOMMERCE_IS_ACTIVE ) return;
$cat_list = GBT_Opt::getOption('product_categories_icons_megamenu_' . $theID );
ob_start();
if ($cat !== true):
$args= array( 'taxonomy' => 'product_cat','hide_empty' => 0, 'menu_order' => 'asc', 'parent' =>0, 'include' => $cat_list );
else:
$args= array( 'taxonomy' => 'product_cat','hide_empty' => 0, 'menu_order' => 'asc', 'parent' =>$theID, 'include' => $cat_list );
endif;
$cats = get_terms( $args );
if ( is_array($cat_list)):
$unsorted = array();
$sorted = array();
foreach ($cats as $v) {
$unsorted[$v->term_id] = $v;
}
foreach ($cat_list as $v) {
if (isset($unsorted[apply_filters( 'wpml_object_id', $v, 'category', TRUE)]))
$sorted[] = $unsorted[apply_filters( 'wpml_object_id', $v, 'category', TRUE)];
}
else:
$sorted = $cats;
$sorted = array_slice($cats, 0, 8);
endif;
echo '<div class="megamenu_icon_list">';
foreach( $sorted as $cat ) {
$icon_type = get_term_meta( $cat->term_id, 'getbowtied_icon_type', true );
if ( $icon_type == 'custom_icon' ) {
$thumbnail_id = get_term_meta( $cat->term_id, 'icon_img_id', true );
if ($thumbnail_id)
$icon = wp_get_attachment_thumb_url( $thumbnail_id );
else
$icon = wc_placeholder_img_src();
// Prevent esc_url from breaking spaces in urls for image embeds
// Ref: https://core.trac.wordpress.org/ticket/23605
$icon = str_replace( ' ', '%20', $icon );
echo '<a href="'.esc_url( get_term_link( $cat->term_id ) ).'"><img src="'. $icon .'" alt="'. $cat->name .'" /><span>'. $cat->name .'</span></a>';
} else {
$icon = get_term_meta( $cat->term_id, 'icon_id', true );
if (!$icon) {
$icon = 'thehanger-icons-alignment_align-all-1';
}
echo '<a href="'.esc_url( get_term_link( $cat->term_id ) ).'"><i class="'. $icon .'"></i><span>'. $cat->name .'</span></a>';
}
}
echo '</div>';
$output = ob_get_contents();
ob_end_clean();
return $output;
}
endif;
* /
Пожалуйста, кто-нибудь может указать мне правильное направление относительно того, как подходить к этому задание?
Заранее спасибо.