“单个产品”页面的自定义布局-Woocommerce

时间:2018-08-30 18:58:33

标签: php wordpress woocommerce

我正在尝试为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' );
      }
  ?>

有什么主意我可以修改它以仍然显示内容,但又不否决我要进行的模板更改吗?

1 个答案:

答案 0 :(得分:0)

  1. 页面模板在运行template_filter之后加载,因此将代码添加到页面模板文件将无效。为此,请将相同的代码放在子主题的functions.php中。

  2. add_filter行末尾的566是指过滤器的加载优先级,而不是类别ID。简而言之,数字越高,过滤器加载的时间越晚。

  3. 最后,您可以使用Woocommerce函数将if语句进行一些简化-if ( is_product() && ( has_term( 'custom', 'product_cat') ) ) {-并没有多大区别,但是更加简洁。