Deshabilite la página de la tienda en Woocommerce para proteger las categorías

5 minutos de lectura

avatar de usuario
Chifliiiiiii

Estoy tratando de deshabilitar la página “comprar” en Woocommerce. Básicamente, estoy creando un tema de tienda para vender impresiones y descargas de imágenes para un fotógrafo.

Debido a que necesito crear galerías privadas, creé un tipo de publicación personalizada donde uso el código abreviado de categoría de woocommerce para mostrar productos y luego protejo con contraseña el tipo de publicación.

Esta es una solución para proteger con contraseña las categorías de woocommerce (si alguien conoce una mejor, explíquela).

El problema es que si alguien va a /shop comprará todos los productos, incluidos los “protegidos”. Así que necesito deshabilitar la página de la tienda y necesito hacerlo mediante programación en las funciones de mi tema. ¿Alguna idea?

avatar de usuario
Salomón Closson

Para deshabilitar la página de la tienda, copie sobre el archive-product.php archivo de la /wp-content/plugins/woocommerce/templates/archive-product.php y poner en /wp-content/themes/{Your Theme}/woocommerce/archive-product.php

Abra el archivo y sobrescriba todo en el archivo con el siguiente código a continuación:

<?php
global $wp_query;

$wp_query->set_404();
status_header(404);

get_template_part('404');

¡Guarde el archivo, y ahora su página de la tienda se ha ido y se ha reemplazado con una página 404!

  • Brillante respuesta.

    – bigdaveygeorge

    26 de agosto de 2016 a las 10:56

  • Esta debería ser la respuesta aceptada, ya que actualizar la opción de la página de la tienda de WooCommerce por sí sola no bloquea el acceso a la página de la tienda.

    – Will Craig

    18 de enero de 2017 a las 0:18

  • Estoy de acuerdo en que, dadas las circunstancias, esta es la forma de hacerlo (personalmente uso un directo wp_redirect(site_url(), '301') en archive-product.php); sin embargo, tener que crear una copia de la plantilla y luego implementar algún tipo de manejo de encabezado es bastante ridículo después de eliminar la página y eliminar la opción WC. Absolutamente debería haber al menos un gancho para esto, en lugar de WC asumiendo que puede pasar por alto la configuración de su sitio, independientemente de sus configuraciones y páginas.

    – índicedos

    31 de marzo de 2017 a las 16:14


  • @indextwo – ¡No podría estar más de acuerdo!

    – Salomón Closson

    31 de marzo de 2017 a las 16:26

  • O use un complemento de redirección de wordpress. Evita editar plantillas y las lleva a la página que tiene los productos que desea que vean.

    – David Hobs

    7 de agosto de 2018 a las 15:02

Agregue esto a las funciones:

function woocommerce_disable_shop_page() {
    global $post;
    if (is_shop()):
    global $wp_query;
    $wp_query->set_404();
    status_header(404);
    endif;
}
add_action( 'wp', 'woocommerce_disable_shop_page' );

Documentos: Documentación de funciones condicionales de WooCommerce

  • Combiné esto con la redirección en los comentarios anteriores, funciona muy bien

    usuario3412695

    20/06/2017 a las 19:30

  • hola, también puedes usar is_woocommerce() para deshabilitar completamente la página de woocommerce, porque si está usando is_shop()el usuario aún puede acceder a través de la página de productos o el carrito o la categoría de productos, puede ver la referencia aquí: docs.woocommerce.com/wc-apidocs/…

    –Anthony Kal

    31 de agosto de 2018 a las 7:00


WooCommerce tiene un filtro para la matriz que utiliza para crear el tipo de publicación Producto: woocommerce_register_post_type_product.

En lugar de cambiar la plantilla de archivo para obligarla a redirigir, puede eliminar completamente el archivo del tipo de publicación, pero cambiar el has_archive atributo en el tipo de publicación en la creación.

add_filter('woocommerce_register_post_type_product', function($post_type) {
    $post_type['has_archive'] = false;
    return $post_type;
});

Luego debe eliminar la página de la tienda en el CMS yendo a WooCommerce » Configuración » Producto » Pantallay haciendo clic en la “x” en la opción “Página de la tienda”.

Es posible que deba vaciar el caché de enlaces permanentes, lo que puede hacer simplemente haciendo clic en el botón “Actualizar” en Ajustes » Enlaces permanentes.

avatar de usuario
David Hobs

*Editar: al parecer, la configuración de página que sugerí a continuación ya no funciona. Si WooCommerce no tiene una configuración de complemento para cambiarlo, personalmente usaría un complemento de redirección de wordpress como Redirección. De esta manera, puede redirigirlos automáticamente desde la página de la tienda no deseada a cualquier página que muestre sus productos. Evita un problema 404 y mantiene todo intacto. También evita la edición de archivos de plantilla, lo que agrega complicaciones a los que no son desarrolladores.


Respuesta antigua:

¿Has probado la configuración de Woo?

Área de administración, menú principal izquierdo, Woocommerce > Configuración Haga clic en la pestaña de páginas.

En la configuración de Páginas está “Página base de la tienda”, en el menú desplegable, hay una pequeña “x” a la derecha. Haga clic en eso para deshacerse de la página.

Si hay enlaces en otros lugares que deben corregirse, hágamelo saber y encontraré los ganchos/filtros para remediarlo.

template_redirect es el último gancho antes de que se muestre la página, por lo que en mi caso de uso pregunto si la página que se está viendo es la página de “compra” y si lo es, redirijo (en mi caso) a una página de precios.

function my__template_redirect(){
    if(is_shop()){
        wp_redirect(site_url() . '/pricing/', '302');
    }
}
add_action('template_redirect', 'my__template_redirect');

avatar de usuario
Dudikowski

La última sugerencia no me funcionó con WP 4.6.1 y WooCommerce 2.6.4. A mí me funciona ocultar productos en la pestaña Publicar.

http://paperhedge.com/hide-products-from-displaying-in-shop-page-woocommerce/

avatar de usuario
Federico Schiocchet

A deshabilitar la tienda predeterminada página y deja la /tienda/ libre de babosas para páginas personalizadas usa esto:

function remove_woocommerce_default_shop( $args, $post_type ) {
    if (class_exists('WooCommerce')) {
        if ( $post_type == "product" ) {
            $args['has_archive'] = true;
        }
        return $args;
    }
}
add_filter('register_post_type_args', 'remove_woocommerce_default_shop', 20, 2);

¿Ha sido útil esta solución?