更新3.3.0/3.3.1后,Woocommerce archive-product.php模板功能中断

更新3.3.0/3.3.1后,Woocommerce archive-product.php模板功能中断,php,wordpress,function,templates,woocommerce,Php,Wordpress,Function,Templates,Woocommerce,在升级到Woocommerce 3.1.1版之前,我已经使用下面的代码很多年了,没有任何问题 该函数只是将默认的archive-product.php更改为基于定义的Woocommerce类别slug的替代模板 我已经阅读了变更日志,我认为有一些事情可能与我的问题有关,但我不确定,因此我在这里联系:) 变更日志中的相关注释似乎是: 修复-添加了要替换的woocommerce\u output\u product\u类别 woocommerce_产品_子类别功能可防止主题过时 在商店和类别上输出类

在升级到Woocommerce 3.1.1版之前,我已经使用下面的代码很多年了,没有任何问题

该函数只是将默认的archive-product.php更改为基于定义的Woocommerce类别slug的替代模板

我已经阅读了变更日志,我认为有一些事情可能与我的问题有关,但我不确定,因此我在这里联系:)

变更日志中的相关注释似乎是:

修复-添加了要替换的woocommerce\u output\u product\u类别 woocommerce_产品_子类别功能可防止主题过时 在商店和类别上输出类别的模板文件 页面错误

然而,在之前的3.3.0版本中,Woocommerce的默认布局/主题有许多更改,这也可能是错误的

在这方面的任何帮助或指导都将是非常棒的

add_filter( 'template_include', 'wpse138858_woocommerce_category_archive_template' );

function wpse138858_woocommerce_category_archive_template( $original_template ) {

    if ( is_product_category( array( 'cat-1', 'cat-2' ) ) )
    {
        return get_stylesheet_directory().'/woocommerce/archive-product_no_sidebar.php';
    }
    elseif ( is_product_category( array( 'cat-3', 'cat-4' ) ) )
    {
        return get_stylesheet_directory().'/woocommerce/archive-product_sidebar.php';
    } 
    elseif ( is_product_category( array( 'cat-5', 'cat-6' ) ) )
    {
        return get_stylesheet_directory().'/woocommerce/archive-product_clubs_page.php';
    } 
    else 
    {
        return $original_template;
    }
}


编辑-函数中出现了不应该出现的错误,是我的错,对不起。。。我直接从live站点复制了代码,只需将类别缩减,使其更具可读性,
else
语句位于您的
elseif
语句中。你必须像这样把它放在后面:

add_filter( 'template_include', 'wpse138858_woocommerce_category_archive_template' );
function wpse138858_woocommerce_category_archive_template( $original_template ) {

    // If cat 1,2,3 return template archive product set 1
    if(is_product_category(array('cat-1','cat-2','cat-3'))) {

        return get_stylesheet_directory().'/woocommerce/archive-product_set_1.php';

    // If cat 4,5,6 return template archive product set 2
    }elseif(is_product_category(array('cat-4','cat-5','cat-6'))) {

        return get_stylesheet_directory().'/woocommerce/archive-product_set_2.php';

    // Else return original template
    }else {

        return $original_template;
    }
}

安装插件WP Rollback,然后单击woocommerce上已安装插件菜单中的Rollback。我也必须这样做。

很抱歉,这是我复制代码时的错误,我在其中添加了}返回,这是我的实时站点上的情况,问题仍然存在。您能告诉我们到底是什么被破坏了吗?它显示或不显示什么?在更新到Woocommerce 3.3.0-3.3.1之前,此函数将根据数组中提供的类别slug加载不同的archive-product.php模板文件。更新后,函数停止工作,默认的archive-product.php始终为loaded@JonnygogoWoocommerce 3.3.1非常新,仍然有一些bug。还有很多主题和插件还没有全部更新,无法使用。因此,3.3.1版还没有为生产网站做好准备…您应该等待一些时间,因为围绕
template\u include
hook与Woocommerce 3.3+有关的StackOverFlow和所有与internet相关的线程…我在3.3.0版中也遇到了同样的问题。我回滚到版本3.2.6,模板_include()现在工作正常。谢谢@loictheaztec抱歉,这是我复制代码时的错误,我已经添加了}返回,这是我的live站点上的情况,问题仍然存在。你仍然有一个“}”spareHey Alex,谢谢,我已经从我的live站点重新复制了代码,这次只删除了一些类别。因为它在更新之前工作,我假设这是无错误的?