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

时间:2012-10-03 20:04:34

标签: wordpress-plugin woocommerce

我试图禁用Woocommerce中的“商店”页面。基本上我正在创建一个商店主题,为摄影师出售照片和图像下载。

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

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

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

9 个答案:

答案 0 :(得分:19)

我不知道为什么这很难找到在线的答案以及为什么没有人能想到这一点。但无论你选择与否,这都是正确答案。

要停用商店页面,请复制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');
?>

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

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

答案 1 :(得分:16)

将此添加到函数:

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' );

文档:WooCommerce Conditional Functions Documentation

答案 2 :(得分:3)

*编辑 - 显然我在下面建议的页面设置不再有效。如果WooCommerce没有插件设置来更改它,我个人会使用wordpress重定向插件,如Redirection。这样,您可以自动将它们从不受欢迎的商店页面重定向到显示您的产品的任何页面。它避免了404问题,并保持一切顺利。它还避免了编辑模板文件,这增加了非开发人员的复杂性。


旧答案:

你试过Woo设置吗?

管理区域,左主菜单,Woocommerce&gt;设置 单击页面选项卡。

在页面设置下是&#34;商店基页&#34;,在下拉列表中,有一个小的&#34; x&#34;在右边。单击它以删除该页面。

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

答案 3 :(得分:2)

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;
});

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

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

答案 4 :(得分:1)

对于WP 4.6.1和WooCommerce 2.6.4,最后的建议对我没有用。隐藏“发布”标签中的产品对我有用。

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

你需要挂钩一些(或者更多)的东西:

/* hide category from shop pages */
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;

    if ( ! is_admin() ) {
        $q->set( 'tax_query', array(array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => array( YOUR-CATEGORY-SLUG, YOUR-CATEGORY-SLUG-2 ), // Don't display products in the knives category on the shop page
            'operator' => 'NOT IN'
        )));

    }

    remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

为你的猫或猫改变,明显地改变你的类别 - 插件,你的类别 - 插件2来隐藏商店页面。

然后,你也需要将它们隐藏起来,对吧?:

/* hide category from menues */
add_filter( 'get_terms', 'get_subcategory_terms', 10, 3 );
function get_subcategory_terms( $terms, $taxonomies, $args ) {
    $new_terms = array();

    // if category and on the shop page (change it with is_woocommerce() if want to hide from all woo pages)
    if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_shop() ) {

        foreach ( $terms as $key => $term ) {
          if ( ! in_array( $term->slug, array( YOUR-CATEGORY-SLUG, YOUR-CATEGORY-SLUG-2 ) ) ) {
            $new_terms[] = $term;
          }

    }
        $terms = $new_terms;
    }
  return $terms;
}

但我不认为这会解决100%的问题,从那时起,搜索结果又如何呢?

答案 7 :(得分:0)

停用默认商店页面,保留/ shop / slug免费以获取自定义页面,请执行以下操作:

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);

答案 8 :(得分:-1)

试试这个

  1. 创建名为“Shop”的新页面
  2. 转到“woocommerce”&gt; “设置”&gt; “产品”&gt; “显示标签”
  3. 选择名为“Shop”的商店页面,然后点击保存更改
  4. 返回“页面”,然后删除“商店”页面(将页面保留在垃圾箱中, 不要永久删除)
  5. 此方法适用于我