• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Как удалить кусок функции?

Stork.71

Гуру
Местный
Есть в файлике wc-template-functions.php функция редиректов. Вот такая:
PHP:
/**
 * Handle redirects before content is output - hooked into template_redirect so is_page works.
 */
function wc_template_redirect() {
    global $wp_query, $wp;

    // When default permalinks are enabled, redirect shop page to post type archive url
    if ( ! empty( $_GET['page_id'] ) && '' === get_option( 'permalink_structure' ) && $_GET['page_id'] == wc_get_page_id( 'shop' ) ) {
        wp_safe_redirect( get_post_type_archive_link('product') );
        exit;
    }

    // When on the checkout with an empty cart, redirect to cart page
    elseif ( is_page( wc_get_page_id( 'checkout' ) ) && WC()->cart->is_empty() && empty( $wp->query_vars['order-pay'] ) && ! isset( $wp->query_vars['order-received'] ) ) {
        wc_add_notice( __( 'Checkout is not available whilst your cart is empty.', 'woocommerce' ), 'notice' );
        wp_redirect( wc_get_page_permalink( 'cart' ) );
        exit;
    }

    // Logout
    elseif ( isset( $wp->query_vars['customer-logout'] ) ) {
        wp_redirect( str_replace( '&', '&', wp_logout_url( wc_get_page_permalink( 'myaccount' ) ) ) );
        exit;
    }

    // Redirect to the product page if we have a single product
    elseif ( is_search() && is_post_type_archive( 'product' ) && apply_filters( 'woocommerce_redirect_single_search_result', true ) && 1 === absint( $wp_query->found_posts ) ) {
        $product = wc_get_product( $wp_query->post );

        if ( $product && $product->is_visible() ) {
            wp_safe_redirect( get_permalink( $product->id ), 302 );
            exit;
        }
    }

    // Ensure payment gateways are loaded early
    elseif ( is_add_payment_method_page() ) {

        WC()->payment_gateways();

    }

    // Checkout pages handling
    elseif ( is_checkout() ) {
        // Buffer the checkout page
        ob_start();

        // Ensure gateways and shipping methods are loaded early
        WC()->payment_gateways();
        WC()->shipping();
    }
}
add_action( 'template_redirect', 'wc_template_redirect' );
В эту функцию собраны все редиректы, которые есть в woocommerce. И один кусок мне сильно мешает, который касается редиректа из пустой корзины:
PHP:
    // When on the checkout with an empty cart, redirect to cart page
    elseif ( is_page( wc_get_page_id( 'checkout' ) ) && WC()->cart->is_empty() && empty( $wp->query_vars['order-pay'] ) && ! isset( $wp->query_vars['order-received'] ) ) {
        wc_add_notice( __( 'Checkout is not available whilst your cart is empty.', 'woocommerce' ), 'notice' );
        wp_redirect( wc_get_page_permalink( 'cart' ) );
        exit;
    }
Мне хочется его либо полностью убрать, либо переопределить - оставить проверку, но чтобы при этих условиях только выводилось оповещение, но не выполнялся непосредственно редирект.
Вариант в принципе есть - полностью переписать эту функцию к себе в functions, удалив из нее ненужный кусок. Но если вдруг при обновлении она поменяется, придется заново все это отлавливать. Так что хотелось бы как-то просто делать проверку по указанным условиям (if ( is_page( wc_get_page_id( 'checkout' ) ) && WC()->cart->is_empty() && empty( $wp->query_vars['order-pay'] ) && ! isset( $wp->query_vars['order-received'] ) )) и если они выполняются, то добавить notice, при этом как-то заблокировать дальнейшую проверку на совпадение этих условий (тем самым заблокировать родную функцию).
Кто шарит в php, подскажите!
 
Сверху Снизу