wordpress 禁用重复的WC产品类别URL

bybem2ql  于 2023-03-01  发布在  WordPress
关注(0)|答案(1)|浏览(105)

WC在使用类别块时生成重复的URL。
示例:demoshop.com/cat-1/product-a
如果修改slug "cat-1",则可以从任何URL访问相同的产品,例如:www.example.com也将导致状态代码200。demoshop.com/modified/product-a will lead to a status code 200 as well.
从搜索引擎优化的Angular 来看,这不是可取的,我想修改如下行为:如果产品页面是通过正确的url访问的,则发送200。如果产品页面是通过任何其他url访问的,则发送301到正确的url。
如果产品有多个类别,则应考虑主要类别。
基于www.example.com论坛中的一个想法,我尝试通过比较用户请求的URL与"原始" URL来解决这个问题:wordpress.org forum I try to resolve the issue by comparing the url requested by user with the "original" url:

global $wp;
   $browser_url = add_query_arg( $wp->query_vars, home_url( $wp->request ) );
   // Should store complete url in variable but stores domain only

   global $post;
   $cat_slug = // Still looking for a solution to get primary product category for current product and to store primary category slug in variable

仍然坚持以上代码部分。任何提示都是非常欢迎的。

zqry0prt

zqry0prt1#

要获得父类别slug,可以使用get_ancestors
首先检查当前对象是否用于分类:

if ( is_tax() ){
    $current_term = get_queried_object()->term_id;
}

一旦能够获得当前项,就可以使用get_ancestors()

$ancestors = get_ancestors( $current_term, 'example_category' ); // 2nd param is tax name

get_ancestors()将返回一个数组,然后可以反转该数组以获得主/主要父级。

if ( $ancestors && is_array( $ancestors ) ) {
    $ancestors = array_reverse( $ancestors );
    $ancestor  = $ancestors[0];
}

相关问题