WooCommerce去除基础链接后产品和分类slug冲突的解决方案

论坛首页 论坛 经验分享 WooCommerce去除基础链接后产品和分类slug冲突的解决方案

标签: 

正在查看 0 条回复
  • 作者
    帖子
    • #20074
      孙锡源
      管理员
        @ibadboy
        楼主
        坏蛋的博客
        ibadboy.net

        WooCommerce官方不推荐去除URL上的基础链接(product和product-category),见此链接:https://docs.woocommerce.com/document/removing-product-product-category-or-shop-from-the-urls/

        官方的理由主要是这样会导致性能损耗。

        但其实这样做了之后还会导致分类和产品的URL产生冲突。比如说分类的slug是plugins,然后有一个产品的slug也是plugins……

        这时你访问:/plugins时,WordPress就不知道你究竟访问的是分类还是产品了。

        此时你可以通过以下代码强制指定访问/plugins时返回plugins分类:

        add_filter( 'request', function ( $query ) {
        	$url = $_SERVER['REQUEST_URI'];
        
        	$pos = strpos( $url, '?' );
        	if ( $pos ) {
        		$url = substr( $url, 0, $pos - strlen( $url ) );
        	}
        
        	$pos = strpos( $url, '#' );
        	if ( $pos ) {
        		$url = substr( $url, 0, $pos - strlen( $url ) );
        	}
        
        	switch ( $url ) {
        		case '/store/plugins':
        			return array( 'product_cat' => 'plugins' );
        		default:
        			return $query;
        	}
        }, 9999 );

         

        如果你想强制指定更多分类,可以在switch的case里多写几条规则。

    正在查看 0 条回复
    • 哎呀,回复话题必需登录。