加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – WooCommerce – 如何根据类别创建多个单一产品模板?

发布时间:2020-12-13 13:35:39 所属栏目:PHP教程 来源:网络整理
导读:你好我对woocommerce相当新,我的商店有四类产品使用相同的单一产品模板.我想添加第五类产品,其中产品页面布局与已使用的产品页面布局非常不同. 这是文件结构 – 主题/ woocommerce /单品/ 主题/ woocommerce /单品 – 模拟/ theme / woocommerce / single-pr
你好我对woocommerce相当新,我的商店有四类产品使用相同的单一产品模板.我想添加第五类产品,其中产品页面布局与已使用的产品页面布局非常不同.

这是文件结构 –

>主题/ woocommerce /单品/
>主题/ woocommerce /单品 – 模拟/
> theme / woocommerce / single-product-mock / title.php
> theme / woocommerce / content-single-product-mock.php
> theme / woocommerce / single-product.php

我创建了一个名为content-single-product-mock.php的文件.在single-product.php中使用以下代码

<?php if (has_term( 'mock','product_cat' )) {
            woocommerce_get_template_part( 'content','single-product-mock' );
        } else{
         wc_get_template_part( 'content','single-product' ); 
        } ?>

对于类别mock,它重定向到content-single-product-mock.php,但它使用单产品文件夹中的模板文件.如何更改content-single-product-mock.php中的模板路径,以便它使用single-product-mock文件夹中的自定义文件?

可能有不止一种方法可以做到这一点,但它们都会转变在包含模板之前过滤模板的想法.

您可以完全跳过WooCommerce的simple-product.php模板(无需覆盖该模板)并直接转到simple-product-mock.php并在那里创建所有内容.你可以通过过滤template_include来做到这一点.

add_filter( 'template_include','so_25789472_template_include' );

function so_25789472_template_include( $template ) {
  if ( is_singular('product') && (has_term( 'mock','product_cat')) ) {
    $template = get_stylesheet_directory() . '/woocommerce/single-product-mock.php';
  } 
  return $template;
}

您可以编辑single-product-mock.php来调用content-single-product-mock.php并对该文件进行硬编码.没有什么要求你继续使用Woo的钩子和功能.它们的目的只是为了让您轻松自定义.

或者说真的很棘手,你可以将单个产品/ title.php等模板复制到单个产品模拟文件夹中…例如:single-product-mock / title.php然后我们在任何时候在模拟类别中的单个产品模板,我们将拦截对单产品/ something.php模板的调用,并将它们重定向到single-product-mock / something.php(如果存在)并继续指向单个产品/某物.如果它没有PHP.我们将通过woocommerce_locate_template过滤器执行此操作.

add_filter( 'woocommerce_locate_template','so_25789472_locate_template',10,3 );

function so_25789472_locate_template( $template,$template_name,$template_path ){

    // on single posts with mock category and only for single-product/something.php templates
    if( is_product() && has_term( 'mock','product_cat' ) && strpos( $template_name,'single-product/') !== false ){

        // replace single-product with single-product-mock in template name
        $mock_template_name = str_replace("single-product/","single-product-mock/",$template_name );

        // look for templates in the single-product-mock/ folder
        $mock_template = locate_template(
            array(
                trailingslashit( $template_path ) . $mock_template_name,$mock_template_name
            )
        );

        // if found,replace template with that in the single-product-mock/ folder
        if ( $mock_template ) {
            $template = $mock_template;
        }
    }

    return $template;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读