En una plantilla de WordPress, ¿cómo puedo detectar si la página actual es el carrito de WooCommerce o la página de pago?

3 minutos de lectura

avatar de usuario
Tántalo

Me gustaría tener un banner de encabezado oculto cuando un usuario está en el carrito de WooCommerce o en el proceso de pago. ¿Hay alguna bandera o variable que pueda verificar para ver si la página actual está en alguna de estas secciones de WooCommerce? Básicamente quiero hacer algo como lo siguiente:

if (!is_checkout() && !is_cart()) {
   echo "<div>My Banner</div>";
}

Me doy cuenta de que puedo crear una plantilla de página personalizada para cada una de estas secciones, pero solo quiero agregar un código simple al encabezado de mi sitio global.

  • Su código es bueno para verificar esta condición. Se agregaron más detalles en la respuesta.

    – muy solo

    21 de mayo de 2020 a las 17:53

  • ¡Bueno, no lo sabrías, Woocommerce pensó en todo! Gracias.

    – Tántalo

    22 de mayo de 2020 a las 17:47

Página del carrito

is_cart()

Devuelve verdadero en la página del carrito.

página de pago

is_checkout()

Devuelve verdadero en la página de pago.

Puedes ver más sobre Etiquetas condicionales de WooCommerce

avatar de usuario
Maciej Krawczyk

Tenga en cuenta que is_checkout() es inútil si lo necesita temprano (antes de que se cargue la plantilla, creo) y devolverá incorrectamente falso en la página de pago si se llama demasiado pronto.

Algo así es más universal:

/**
 * Checks if checkout is the current page.
 *
 * @return boolean
 */
function better_is_checkout() {
  $checkout_path    = wp_parse_url(wc_get_checkout_url(), PHP_URL_PATH);
  $current_url_path = wp_parse_url("http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]", PHP_URL_PATH);
  
  return (
    $checkout_path !== null
    && $current_url_path !== null
    && trailingslashit($checkout_path) === trailingslashit($current_url_path)
  );
}

is_checkout () está bien para la pregunta real, pero la pregunta también ocupa el primer lugar en Google para “WooCommerce check if checkout”

Lo mismo aplica para el carrito:

/**
 * Checks if cart is the current page.
 *
 * @return boolean
 */
 function better_is_cart() {
   $cart_path        = wp_parse_url(wc_get_cart_url(), PHP_URL_PATH);
   $current_url_path = wp_parse_url("http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]", PHP_URL_PATH);

    return (
      $cart_path !== null
      && $current_url_path !== null
      && trailingslashit($cart_path) === trailingslashit($current_url_path)
  );
}

  • Gracias por esto Maciej, estaba tratando de verificar el pago mientras cargaba el carrito desde la sesión, así que esto realmente me ayudó a confirmar mi sospecha. ¡Me ahorraste tiempo, así que felicitaciones!

    – Descarado

    13 de enero a las 16:04

Si desea utilizar una función de wordpress, hay `is_page (‘nombre’)’ aquí para usted. https://developer.wordpress.org/reference/functions/is_page/

Debe usar el nombre (slug de página) de sus páginas. En el ejemplo, asumo que se llaman ‘carrito y ‘pago’.

if (!is_page('cart') && !is_page('checkout')) { ... }

Como en la respuesta de mujuonly, también puedes usar lo que te ofrece woocommerce con etiquetas condicionales.

Mi respuesta puede ser una alternativa si tiene problemas con las funciones de woocommerce o desea quedarse con las funciones de wordpress.

¿Ha sido útil esta solución?