WooCommerce-如何根据产品类别创建单独的单个产品模板?

时间:2019-04-13 11:19:10

标签: php wordpress templates woocommerce

我一直在阅读所有类似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错误,不能完全确定。

有人可以帮我弄清楚我做错了什么吗吗?

1 个答案:

答案 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;
}