如何禁用/隐藏 WooCommerce 单个产品页面?

15

我想在我的WordPress-WooCommerce网站上隐藏单个产品详细页面。我该如何做到这一点,而不破坏WooCommerce功能?

7个回答

15

您可以在商店页面上删除生成的锚点,该锚点永远不会将用户重定向到单个页面。为此,您需要将以下代码粘贴到您的functions.php文件中。

remove_action( 
  'woocommerce_before_shop_loop_item',
  'woocommerce_template_loop_product_link_open',
  10
);

这段代码将会移除链接,但是之后你还需要把锚点的闭合标签也一并移除,以免破坏你的HTML结构。

remove_action(
  'woocommerce_after_shop_loop_item',
  'woocommerce_template_loop_product_link_close',
  5
);

13

把它放到 functions.php 中

//Removes links
add_filter( 'woocommerce_product_is_visible','product_invisible');
function product_invisible(){
    return false;
}

//Remove single page
add_filter( 'woocommerce_register_post_type_product','hide_product_page',12,1);
function hide_product_page($args){
    $args["publicly_queryable"]=false;
    $args["public"]=false;
    return $args;
}

2
这不仅隐藏了产品页面,还将所有产品设置为不可见。正确答案是@Ibad Shah的。 - Max

7

您可以使用is_product()助手函数注册一个钩子,以便在产品页面的情况下返回404

function prevent_access_to_product_page(){
    global $post;
    if ( is_product() ) {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
    }
}

add_action('wp','prevent_access_to_product_page');

解决方案经过测试并且可行。

注意:该解决方案在某种程度上基于@ale的答案中的一些信息。


2

单页面是 WordPress 提供的一种功能,无法禁用。但是有一些方法可以防止访问单个产品页面。

第一种方法是编辑您的商店(产品存档)模板,并删除所有链接到单个页面的位置。

第二种方法是在每次页面加载时检查页面是否为单个产品页面,并将用户重定向到您想要的任何位置:

add_action('init','prevent_access_to_product_page');
function prevent_access_to_product_page(){
    if ( is_product() ) {
        wp_redirect( site_url() );//will redirect to home page
    }
}

您可以将此代码包含在子主题目录的functions.php文件中。请注意,我尚未测试过代码。


1

使用template_redirect动作可能是一个好主意:

function redirect_if_single_product()
{
    if (is_product()) {
        wp_safe_redirect(esc_url(home_url()));
        exit();
    }
}
add_action('template_redirect', 'redirect_if_single_product');

1
在大多数情况下,删除链接到产品页面的单击可能性将有效地“禁用”转到产品页面的功能。 您可以使用CSS(针对您的主题调整类)来实现此操作:
.product-title a,
.product-container a,
.product-details a {
    pointer-events: none;
}

注意:这不会删除页面本身,但会禁用通过点击访问它。要禁用通过直接链接访问页面,请使用提供的重定向解决方案之一。

0

这是一个旧问题,但是没有一个答案对我有用。

这里是我的答案,改编自AleMhdSyrwan的答案。

add_action('wp','prevent_access_to_product_page');
function prevent_access_to_product_page(){
  if ( is_product() ) {
    wp_redirect( get_permalink( 269 ) );
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接