我想在用户输入时有条件地使用文件。我在我的孩子主题中使用WooCommerce模板。当然,文件(content-single-product.php
)是在子主题中自定义的。但是,如果需要,我还希望为用户提供使用默认WC文件的选项。简而言之,我想有条件地使用该文件,用户将选择。
我正在使用PHP copy()
和unlink()
函数。如果这是最佳解决方案,或者如果您有比我更好的建议,我只想要您的专家意见。以下是我孩子主题中的功能。
/*...for copying the file from a child theme folder to the woocommerce folder...*/
function ac_wc_files_to_theme()
{
$theme_dir = get_stylesheet_directory() . '/woocommerce/files/content-single-product.php';
$theme_dir_file = get_stylesheet_directory() . '/woocommerce/content-single-product.php';
if (!copy($theme_dir, $theme_dir_file)) {
echo "failed to copy $theme_dir to $theme_dir_file...\n";
}
}
/*...for removing the file from a the woocommerce folder...*/
function ac_wc_delete_wc_file(){
$fileArray = array(
get_stylesheet_directory() . '/woocommerce/content-single-product.php'
);
foreach ($fileArray as $value) {
if (file_exists($value)) {
unlink($value);
} else {
echo 'file not found';
}
}
}
/*...calling the options from the theme settings area....*/
if (get_option('ac_wc_default_single') == 1) {
add_action('init', 'ac_wc_delete_wc_file');
remove_action('init', 'ac_wc_files_to_theme');
}
else {
add_action('init', 'ac_wc_files_to_theme');
remove_action('init', 'ac_wc_delete_wc_file');
}
代码工作正常。如果可以的话,我需要你的观点。感谢
答案 0 :(得分:0)
这是我在没有经过大量测试的情况下过滤模板的最佳猜测。
// change the default template path to `woocommerce/files`
function ac_wc_override_template_path(){
return 'woocommerce/files/';
}
add_filter( 'woocommerce_template_path', 'ac_wc_override_template_path' );
// now filter the woocommerce template
function ac_wc_override_single_product($template, $template_name, $template_path) {
$alt_template = '';
if ($template_name == 'content-single-product.php') {
$alt_template = locate_template( trailingslashit( $template_path ) . 'content-single-product-1.php' );
}
if( $alt_template && get_option( 'use_my_themes_templates' ) ){
return $alt_template;
} else {
return $template;
}
}
add_filter('woocommerce_locate_template', 'ac_wc_override_single_product', 20, 3);