Как узнать предыдущую страницу в Woocommerce?

Всем привет. Нужно получить ссылку на предыдущую страницу. Любую предыдущую. В общем HTTP_REFERER нету, поэтому делаю что-то типа того
add_action( 'woocommerce_init', function () {
    session_start();
    $current_page = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    if ( empty( $_SESSION['previuos_page'] ) && empty( $_SESSION['current_page'] ) ) {
        $_SESSION['previuos_page'] = $current_page;
        $_SESSION['current_page'] = $current_page;
    } elseif ( $_SESSION['current_page'] !== $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ) {
        $_SESSION['previuos_page'] = $_SESSION['current_page'];
        $_SESSION['current_page'] = $current_page;
    }
//    echo '<p>Previous: ' . $_SESSION['previuos_page'] . '</p>';
//    echo '<p>Current: ' . $_SESSION['current_page'] . '</p>';
} );


Всё бы ничего, но если я перехожу на чекаут или корзину, то он получает такую ссылку mysite?wc-ajax=update_order_review, т.к. обращение через аякс идет. Идеи? Заранее спасибо
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 2
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Если WP запускается под ajax-запрос, то в процессе устанавливается константа DOING_AJAX. Также есть функция wp_doing_ajax(), c помощью которой можно проверить - это обычный запрос или ajax. Возвращает булевое true/false.

Проверяйте, и если ajax - не меняйте значение в сессии.
Ответ написан
Комментировать
maxxannik
@maxxannik
Сайты на WordPress + Интернет магазины WooCommerce
Сессии - должны использоваться в крайних случаях когда без них ну совсем никак.
Это часто является причиной диких тормозов.
По мне так проще сохранять URL в куки.
Например иметь 2 куки:
1 current_url
2 past_url

Смотрим что есть в current_url - если пусто сохраняем туда текущий адрес
Если заполнено - передаем значение в past_url, а затем сохраняем текущий адрес.

Все в 1 куке всегда будет текущий адрес, а во второй прошлый. Делать можно на фронте и на бэкенде.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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