禁用Woocommerce上的Shop页面以保护类别

chi*_*iii 7 wordpress woocommerce

我试图禁用Woocommerce中的"商店"页面.基本上我正在创建一个商店主题,为摄影师出售印刷品和图像下载.

因为我需要创建私人画廊我创建了一个自定义的帖子类型,我使用woocommerce类别短代码来显示产品,然后我的密码保护帖子类型.

这是密码保护woocommerce类别的解决方法(如果有人知道更好的,请解释).

问题是,有人去/购物他们将所有产品,包括"受保护的".所以我需要禁用商店页面,我需要以编程方式对我的主题功能进行操作.有什么想法吗?

Sol*_*son 21

我不知道为什么这很难找到网上的答案,为什么没有人能想到这个.但无论你选择与否,这都是正确的答案.

要禁用商店页面,请复制并放入archive-product.php文件/wp-content/plugins/woocommerce/templates/archive-product.php/wp-content/themes/{Your Theme}/woocommerce/archive-product.php

打开文件并使用以下代码覆盖文件中的所有内容:

<?php
global $wp_query;

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

get_template_part('404');
?>
Run Code Online (Sandbox Code Playgroud)

保存文件,现在您的商店页面已经消失,现在是404页面!TADA!

现在,所有那些说它无法完成的人,只是将其从菜单中删除,以及所有那些functions.php没有工作的疯狂行动解决方案的人以及所有那些说要删除商店页面的人Woocommerce->设置区域,现在可以吃自己的话,因为这些方法都不起作用,如果他们在回答这个问题之前花了5分钟自己测试一下,他们就会知道这个!

  • 这应该是公认的答案,因为仅更新WooCommerce商店页面选项不会阻止访问商店页面 (3认同)
  • 我同意,鉴于这种情况,这是实现它的方法(我个人在`archive-product.php`中使用直接的'wp_redirect(site_url(),'301')`; 但是,在删除页面并删除WC选项后,必须创建模板的副本然后实现某种标头处理是非常荒谬的.绝对应该**至少**一个钩子,而不是WC _assuming_它可以在你的网站配置上粗暴对待,无论你的设置和页面. (3认同)

小智 18

将此添加到函数:

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' );
Run Code Online (Sandbox Code Playgroud)

文档:WooCommerce条件函数文档


小智 5

WooCommerce对数组的过滤器,使用它来创建产品后类型:woocommerce_register_post_type_product

而不是更改存档模板以强制其重定向,您可以完全删除帖子类型的存档,但has_archive在创建时更改帖子类型的属性。

add_filter('woocommerce_register_post_type_product', function($post_type) {
    $post_type['has_archive'] = false;
    return $post_type;
});
Run Code Online (Sandbox Code Playgroud)

然后,您应该通过转到WooCommerce » 设置 » 产品 » 显示,然后单击“商店页面”选项上的“x”来删除 CMS 中的商店页面。

您可能需要刷新永久链接缓存,只需单击Settings » Permalinks 中的“更新”按钮即可。


小智 5

template_redirect 是页面渲染之前的最后一个钩子,因此在我的用例中,我询问正在查看的页面是否是“商店”页面,如果是,我会重定向到(在我的情况下)定价页面。

function my__template_redirect(){
    if(is_shop()){
        wp_redirect(site_url() . '/pricing/', '302');
    }
}
add_action('template_redirect', 'my__template_redirect');
Run Code Online (Sandbox Code Playgroud)


Dav*_*obs 4

*编辑 - 显然我在下面建议的页面设置不再有效。如果 WooCommerce 没有插件设置来更改它,我个人会使用 WordPress 重定向插件,例如Redirection。通过这种方式,您可以自动将它们从不需要的商店页面重定向到显示您产品的任何页面。它避免了 404 问题并保持一切完好。它还避免了编辑模板文件,这会给非开发人员带来复杂性。


旧答案:

您尝试过 Woo 设置吗?

管理区域,左侧主菜单,Woocommerce > 设置 单击页面选项卡。

在页面设置下是“商店基本页面”,在下拉列表中,右侧有一个小“x”。单击该按钮即可删除该页面。

如果其他地方有需要修复的链接,请告诉我,我会找到挂钩/过滤器来修复它。

  • 这是行不通的,在我看来,应该有一个钩子,或者至少有一些可以工作的东西。 (2认同)