这是文件结构 –
>主题/ 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; }