如何在WordPress中有条件地使用文件?

时间:2016-03-06 14:04:13

标签: php wordpress woocommerce

我想在用户输入时有条件地使用文件。我在我的孩子主题中使用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');
}

代码工作正常。如果可以的话,我需要你的观点。感谢

1 个答案:

答案 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);