我一直在阅读所有类似here之类的不同问题和答案,只是试图为应用产品类别创建单独的模板。
就我而言,我想使用产品类别'fancy'(而不是'mock')来加载单独的模板文件。也许我没有完全理解这些答案,但是我目前在我的孩子主题的function.php中是这样的:
add_filter( 'template_include', 'so_25789472_template_include' );
function so_25789472_template_include( $template ) {
if ( is_singular('product') && (has_term( 'fancy', 'product_cat')) ) {
$template = get_stylesheet_directory() . '/woocommerce/single-product-fancy.php';
}
return $template;
,它根本不起作用。我的child-theme / woocommerce /文件夹中有single-product-fancy.php和content-single-product-fancy.php。
single-product-fancy.php在第37行有此内容:
wc_get_template_part( 'content', 'single-product-fancy' );
和content-single-product-fancy.php具有我单独的模板布局
我有其他的变体似乎可以工作,但随后会为主页加载空白页面,我认为是由于php错误,不能完全确定。
有人可以帮我弄清楚我做错了什么吗吗?
答案 0 :(得分:0)
我用这个来解决这个问题:
add_filter( 'wc_get_template_part', 'so_25789472_get_template_part', 10, 3 );
/**
* Change wc template part for product with a specific category
*
* @param string $templates
* @param string $slug
* @param string $name
* @return string
*/
function so_25789472_get_template_part( $template, $slug, $name ) {
if ( $slug == 'content' && $name = 'single-product' && has_term( 'fancy', 'product_cat' ) ) {
$template = locate_template( array( WC()->template_path() . 'content-single-product-fancy.php' ) );
}
return $template;
}