为了将来的观众,添加此通知。
以下答案假设任何人都具备以下知识
php和基本调试知识:如何var_dump() 或print_r()Hooks, 何时以及如何正确使用它们,您可以轻松地修改主题文件功能。php有关插件相关开发,请参阅Plugin Handbook示例适用于两种输入函数。php或插件文件中。由于每个条件不同,您自己的插件需要添加额外的逻辑方法1(内部主题)您可能需要创建自己的single-product.php
并放入your-theme/woocommerce/single-product.php;
在同一文件夹中再准备两个文件,content-single-exploded.php
和content-single-other.php
并放置在的同一文件夹中single-product.php
如果要控制模板文件中的逻辑single-product.php
在模板文件中,可以执行以下操作,这将有助于选择要包含的不同模板文件。
在您的single-product.php, 这里有一个简化的版本来说明这个概念。
// ...
<?php
if( $product->get_type() === \'exploded\' ) {
wc_get_template_part( \'content\', \'single-exploded\' );
} else {
wc_get_template_part( \'content\', \'single-other\' );
}
// ...
?>
方法2(主题或插件)如果要控制插件中的模板,可以使用过滤器
template_include
然后做你需要的检查。
您可以将以下代码放入主题函数中。php或您的插件,并尝试加载单个产品页面。
* It is NOT necessary to add the following code inside any action.
// you can use this filter to control the template path and use the plugin template
add_filter( \'template_include\', \'q363767_tweak_template\' );
function q363767_tweak_template( $template ) {
if( preg_match( \'/single-product.php/\', $template ) ) {
// do the tweaking and update the path to single-product-explode.php with plugin directory
// you may do var_dump here to see what is $template eg.
// var_dump( $template );
// $template = \'your-template-path\';
}
return $template;
}
由于答案是针对模板文件的,因此这种方式将无法按预期工作:
function your_function() {
// not necessary to put the code here
// XXX
// copy the above code here and run -> will NOT work
// XXX
}
add_action(\'woocommerce_before_single_product\',\'your_function\');
因为
woocommerce_before_single_product
不是用于控制整个模板,也不是必需的。