Woocommerce Отмена Удалить пункт перенаправления - PullRequest
0 голосов
/ 05 мая 2018

Как я могу перенаправить обратно в / корзину после нажатия на ссылку «Отменить», когда удаляю из нее элемент?

Меня не волнует пустая корзина или нет. Мне уже пришлось реализовать template_redirect, поэтому, когда пользователь «удаляет» элемент из корзины, он перенаправляет обратно в корзину, а не на домашнюю страницу. С:

    add_action( 'template_redirect', function( ) {
        $_var = ( $_GET[ 'removed_item' ] ) ?? null;
        //var_dump($_var);
        if( $_var == '1' ){ 
            wp_safe_redirect( '/cart', 301 );
            die();
        }
    } );

Могу ли я подключиться к тому же действию? Я не вижу строку запроса после нажатия кнопки «Отменить», хотя ...

EDIT

Я вижу, где выполняется действие. Он в плагине включает / class-ws-form-handler.php, прямо вокруг строки 536 ... содержащий:

        // Undo Cart Item
        $cart_item_key = sanitize_text_field( $_GET['undo_item'] );

        WC()->cart->restore_cart_item( $cart_item_key );

        $referer  = wp_get_referer() ? remove_query_arg( array( 'undo_item', '_wpnonce' ), wp_get_referer() ) : wc_get_cart_url();
        wp_safe_redirect( $referer );
        exit;

РЕДАКТИРОВАТЬ 2: Добавление следующего к моему перенаправлению выше ничего не делает ...

// undo the remove, redirect back to cart
if ( ! empty( $_GET['undo_item'] ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'woocommerce-cart' ) ) {
    // Undo Cart Item
    $cart_item_key = sanitize_text_field( $_GET['undo_item'] );
    WC()->cart->restore_cart_item( $cart_item_key );
    wp_safe_redirect( wc_get_cart_url() );
    exit;
}

Итак, когда я var_dump wp_get_referer(), я возвращаюсь на главную страницу сайта, а это не то, что я ищу. Я не хочу изменять этот файл из-за того, что это не слишком хорошая идея ... так, как я могу вместо этого просто изменить действие? Сама функция: public static function update_cart_action()

1 Ответ

0 голосов
/ 05 мая 2018

Итак ... В итоге мне пришлось сделать немного вуду, чтобы заставить это работать.

Вот и крюк ...

// undo the remove, redirect back to cart
// check if the cart is updated... if it is, proceed
$_cu = apply_filters( 'woocommerce_update_cart_action_cart_updated', true );
if( $_cu ) {
    global $woocommerce;
    if ( ! empty( $_GET['undo_item'] ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'woocommerce-cart' ) ) {
        // item
        $cart_item_key = sanitize_text_field( $_GET['undo_item'] );
        // Get the cart
        $woocommerce->cart->get_cart();
        // restore the item
        $woocommerce->cart->restore_cart_item( $cart_item_key );
        // now do the redirect
        wp_safe_redirect( wc_get_cart_url() );
        exit;
    }
}

Применяется в событии init

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...