Возможно, вы получаете дубликат, потому что вы удаляете и добавляете действия в разных хуках, а затем добавляете новое действие в другой хук. Это может привести к тому, что действия, которые вы удалили, все еще срабатывают, потому что вы удалили их в другом хуке.
Попробуйте удалить действия в одном хуке, а затем добавить новое действие в этом же хуке. Например, попробуйте такой код:
add_action( 'woocommerce_before_shop_loop_item_title', 'maudern_remove_product_badges_wrapper', 5 );
function maudern_remove_product_badges_wrapper() {
remove_action( 'woocommerce_before_shop_loop_item_title', 'maudern_product_badges_wrapper_open', 5 );
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 6 );
remove_action( 'woocommerce_before_shop_loop_item_title', 'maudern_product_badges_wrapper_close', 8 );
add_action( 'woocommerce_before_shop_loop_item_title', 'maudern_add_product_badges_wrapper', 5 );
}
function maudern_add_product_badges_wrapper() {
echo '<div class="wrap">';
maudern_product_badges_wrapper_open();
woocommerce_show_product_loop_sale_flash();
maudern_product_badges_wrapper_close();
echo '</div>';
}
Этот код удаляет действия в одном хуке и добавляет новое действие в этом же хуке. Он также использует две отдельные функции для удаления и добавления действий.