你错过了一个重要的部分。
在template\\u include挂钩中,需要检查是否存在要覆盖的其他模板文件。然后根据插件添加逻辑。
此外,您还弄乱了路径,首先声明它,然后在输出中再次使用plugin\\u dir\\u path,因此这也有点错误。您需要为原始模板传入变量,然后在将其传递到输出之前捕获它。
我过去通过“template\\u include”挂钩完成了这项工作。过滤器也可以工作,但我不能确认这一点。
这是我的解决方案,它可以在不同的情况下使用插件文件覆盖主题文件。我还没有测试过这个,但应该可以。
<?php
function wpse_template_logic( $original_template ) {
// Let\'s build a directory variable for the paths
$dir = plugins_url(\'/your-plugin-folder-name\');
// Check the theme template for wc loop-start.php
// Make sure you establish the correct paths by "get_template_directory_uri()" and "plugins_url()" function
// Also, be sure to "only" trigger the action, when a certain condition is met
// You don\'t want to trigger this every time, just when the template is requested
if (is_page(\'whatever_wc_page\') || $whatever_condition_you_want_to_check) {
// Now check to see, if the file in the folder XY exists, then overwrite it
// The outer file_exists check will return true or false, if or if not the template exists in your theme folder, if it does, then move to the plugin folder to get the template
// This logic is up to you more or less, according to your strategy
// use the $dir variable to get to the your directory and the template
if(file_exists(get_template_directory_uri().\'/woocommerce/loop/loop-start.php\')){
return $dir . \'/custom-wc-template-folder-in-your-plugin/loop-start.php\';
}
return $original_template;
}
// First argument is the hook, then the function name, which you want to execute, then the priority, then the amount of arguments
add_action( \'template_include\', \'wpse_template_logic\', 10, 1 );
对于开发中遇到的此类问题,我强烈建议安装插件“What the file”。它将显示当前使用的模板名称。另一个很好的插件是“查询监视器”。它还具有向您显示事物(主题和插件)路径的功能,非常非常有用。也许这会有帮助。
我希望我能帮点忙。如果你能接受正确的答案,我会很高兴的,谢谢你。