我正在尝试为Woocommerce中的其中一个产品页面创建自定义布局。我搜索并遵循了许多教程,但没有一个对我有用。我复制了“ single-product.php”,并将其放入文件夹“ woocommerce”中的活动子主题中。然后,我将其复制并重命名为“ single-product-landing.php”。
然后我将以下代码放入我的functions.php页面中:
add_filter( 'template_include', 'custom_single_product_template_include', 10 );
function custom_single_product_template_include( $template ) {
if ( is_product() && ( has_term( 'custom', 'product_cat') ) ) {
$template = get_stylesheet_directory() . '/woocommerce/single-product-landing.php';
}
return $template;
}
然后,我尝试更改single-product-landing.php中的项目,但是没有任何变化,因此无法进行提取。确认一下,我已将产品分配到“自定义”类别。
我还应该补充一点,我的产品是“可变”产品,不确定在这里是否有任何影响。
编辑:我在'single.php'文件中找到了以下代码-我认为这可能会造成干扰。问题是,如果我删除了此内容,则我的任何页面(即使是不受新模板影响的页面)也不会显示任何内容:
<?php
if(get_theme_mod('product_layout') == 'custom') {
wc_get_template_part( 'content', 'single-product-custom' );
} else {
wc_get_template_part( 'content', 'single-product' );
}
?>
有什么主意我可以修改它以仍然显示内容,但又不否决我要进行的模板更改吗?
答案 0 :(得分:0)
页面模板在运行template_filter
之后加载,因此将代码添加到页面模板文件将无效。为此,请将相同的代码放在子主题的functions.php
中。
add_filter
行末尾的566是指过滤器的加载优先级,而不是类别ID。简而言之,数字越高,过滤器加载的时间越晚。
最后,您可以使用Woocommerce函数将if
语句进行一些简化-if ( is_product() && ( has_term( 'custom', 'product_cat') ) ) {
-并没有多大区别,但是更加简洁。