@Stanislav6

Почему не работает remove_action?

Пытаюсь переделать вывод данных товара в цикле.
Нашёл в теме как выводится скидка на товар:

// Archive Hooks.

remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 );
add_action( 'woocommerce_before_shop_loop_item_title', 'maudern_product_badges_wrapper_open', 5 );
add_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 6 );
add_action( 'woocommerce_before_shop_loop_item_title', 'maudern_product_badges_wrapper_close', 8 );

add_filter( 'woocommerce_post_class', 'maudern_product_loop_item_classes', 10, 2 );


Отключаю и вызываю заново:
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_after_shop_loop_item_title', 'loop_products_input', 10 );
function loop_products_input() {
    echo '<div class="wrap">';
        maudern_product_badges_wrapper_open();
        woocommerce_show_product_loop_sale_flash();
        maudern_product_badges_wrapper_close();
    echo '</div>';
}


и получаю дубликат. В чём может быть дело?
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ответы на вопрос 1
@5465
Возможно, вы получаете дубликат, потому что вы удаляете и добавляете действия в разных хуках, а затем добавляете новое действие в другой хук. Это может привести к тому, что действия, которые вы удалили, все еще срабатывают, потому что вы удалили их в другом хуке.

Попробуйте удалить действия в одном хуке, а затем добавить новое действие в этом же хуке. Например, попробуйте такой код:

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>';
}


Этот код удаляет действия в одном хуке и добавляет новое действие в этом же хуке. Он также использует две отдельные функции для удаления и добавления действий.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы