代码之家  ›  专栏  ›  技术社区  ›  chifliiiii

禁用Wooccommerce上的商店页面以保护类别

  •  7
  • chifliiiii  · 技术社区  · 13 年前

    我正在尝试禁用Wooccommerce中的“商店”页面。基本上,我创建了一个商店主题,为摄影师销售印刷品和图像下载。

    因为我需要创建私人画廊,所以我创建了一个自定义的帖子类型,在那里我使用wooccommerce类别的短代码来展示产品,然后我用密码保护帖子类型。

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

    问题是,如果有人去/购物,他们会购买所有产品,包括“受保护的产品”。所以我需要禁用商店页面,并且我需要在我的主题函数上以编程方式执行它。有什么想法吗?

    9 回复  |  直到 13 年前
        1
  •  28
  •   jsims281    6 年前

    要禁用商店页面,请复制 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页面!

        2
  •  23
  •   bphi    7 年前

    将其添加到函数中:

    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

        3
  •  5
  •   Lewis    8 年前

    WooCommerce有一个用于创建产品帖子类型的数组过滤器: woocommerce_register_post_type_product

    您可以完全删除post-types归档,而不是更改归档模板以强制其重定向,但更改 has_archive 属性。

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

    然后,您应该删除CMS中的商店页面,方法是: WooCommerce设置产品展示 ,然后单击“商店页面”选项上的x。

    您可能需要刷新永久链接缓存,只需单击中的“更新”按钮即可完成 设置固定链接

        4
  •  4
  •   David Hobs    7 年前

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


    老答案:

    你试过吴的设定吗?

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

    在页面设置下是“商店基本页面”,在下拉菜单上,右边有一个小“x”。单击该按钮可删除该页面。

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

        5
  •  4
  •   ceotoolsuite    6 年前

    template_redirect是页面呈现前的最后一个挂钩,所以在我的用例中,我会询问正在查看的页面是否是“商店”页面,如果是,我会重定向到(在我的情况下)定价页面。

    function my__template_redirect(){
        if(is_shop()){
            wp_redirect(site_url() . '/pricing/', '302');
        }
    }
    add_action('template_redirect', 'my__template_redirect');
    
        6
  •  1
  •   Dudikowski    9 年前

    最后一个建议不适用于WP 4.6.1和WooCommerce 2.6.4。在“发布”选项卡中隐藏产品对我很有用。

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

        7
  •  1
  •   Federico Schiocchet    8 年前

    禁用默认商店 第页和 放开商店 对于自定义页面,请使用以下内容:

    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
  •  0
  •   rgdesign    12 年前

    你需要钓上几件(或者更多)东西:

    /* 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' );
    
    }
    

    改变,显然是YOUR-CATEGORY-SLUG,YOUR-CATEGORY-SULG-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%解决问题,从那以后,搜索结果呢?

        9
  •  -1
  •   user3395368    9 年前

    试试这个

    1. 创建名为“商店”的新页面
    2. 转到“电子商务”>“设置”>“产品”>“显示选项卡”
    3. 选择名为“商店”的商店页面,然后单击保存更改
    4. 回到“页面”,然后删除“商店”页面(将页面放在垃圾桶上, 不要永久删除)

    这个方法对我很管用