我一整天都把头发拉了出来,请原谅简短说明,我只需要验证我的理智!!
正如标题所说,我正试图在woocommerce中创建两个或三个不同的单一产品布局。尝试实现的最小目标是拥有多个单产品文件夹,每个文件夹都有自己的名称和配置。
无论以哪种方式我尝试覆盖single-product.php并使该文件使用逻辑来检查product_cat并相应地提供模板,我要么页面没有加载,要么我写的内容被跳过并且默认装了。
到目前为止,我已经多次通过以下方法,尝试将可能过时的代码拼凑在一起或以其他方式造成所有大惊小怪:
WooCommerce - How to create multiple single product template based on category?
Woocommerce single product - template by categories
Creating a different template file for certain Product Categories - Wordpress/Woocommerce?
我更希望有人可能对此有所了解,我显然很遗憾,因为有很多关于尝试什么的文章,大多数都声称成功,但我无法这样做。
[更新]使用@helgatheviking的template_include
代码
目前还没有成功,但这就是我要去的地方;
文件结构 团队商店是我想要的类别
<?php wc_get_template_part( 'content', 'single-product-team-shops' ); ?>
正如我上面所说,这不起作用,但希望我提供的问题可能更明显。
再次感谢您的帮助:)
[想想我知道了]
好的,所以我觉得我有一些有用的东西,至少现在似乎还有一些进一步的测试要做,但是任何想法都不过是受欢迎的,这就是我迄今为止所拥有的一个 - 我的主题中的product-team-shops文件夹
add_filter( 'woocommerce_locate_template', 'so_25789472_locate_template', 10, 3 );
function so_25789472_locate_template( $template, $template_name, $template_path ){
$term_id = 2854;
$taxonomy_name = 'product_cat';
$term_children = get_term_children( $term_id, $taxonomy_name );
foreach ( $term_children as $child ) {
// on single posts with mock category and only for single-product/something.php templates
if( is_product() && has_term( $child, '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-team-shops/", $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;
}
答案 0 :(得分:5)
对{&#34; custom&#34;中的任何产品使用single-product-custom.php
模板类别:
add_filter( 'template_include', 'so_43621049_template_include' );
function so_43621049_template_include( $template ) {
if ( is_singular('product') && (has_term( 'custom', 'product_cat')) ) {
$template = get_stylesheet_directory() . '/woocommerce/single-product-custom.php';
}
return $template;
}
注意:如果您在single-product-custom.php
模板中使用相同的操作挂钩,则会获得与默认single-product.php
相同的外观。你可以重命名&#39;所有的钩子然后可以添加现有的功能(如添加到购物车按钮等的功能)到新的钩子,以实现完全自定义的外观。