Php woocommerce\u从插件而不是主题找到模板过滤器
我发现了这篇关于使用插件而不是主题覆盖Woocommerce模板的文章: 它似乎几乎可以工作,但它不适用于woocommerce/templates目录根目录中的任何模板(如single-product.php或content-single-product.php) 为了举例说明,我有这个过滤器:Php woocommerce\u从插件而不是主题找到模板过滤器,php,wordpress,plugins,woocommerce,Php,Wordpress,Plugins,Woocommerce,我发现了这篇关于使用插件而不是主题覆盖Woocommerce模板的文章: 它似乎几乎可以工作,但它不适用于woocommerce/templates目录根目录中的任何模板(如single-product.php或content-single-product.php) 为了举例说明,我有这个过滤器: add_filter('woocommerce_locate_template', array($this, 'woocommerce_locate_template'), 10, 3); 调用此
add_filter('woocommerce_locate_template', array($this, 'woocommerce_locate_template'), 10, 3);
调用此函数:
public function woocommerce_locate_template($template, $template_name, $template_path) {
global $woocommerce;
al_log('Looking for ' . $template . ', ' . $template_name . ', ' . $template_path);
$_template = $template;
if (! $template_path) $template_path = $woocommerce->template_url;
$plugin_path = $this->my_plugin_path() .'/woocommerce/';
//look within passed path within the theme. This is the priority
$template = locate_template(
array(
$template_path . $template_name,
$template_name,
)
);
//modification: get the template from this plugin, if it exists
if (!$template && file_exists($plugin_path . $template_name))
$template = $plugin_path . $template_name;
//use default template
if (! $template) {
$template = $_template;
}
return $template;
}
它会产生以下日志行:
[davetbo@dev wp-content]$ [05-Feb-2016 17:10:46 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/global/breadcrumb.php, global/breadcrumb.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/sale-flash.php, single-product/sale-flash.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/product-image.php, single-product/product-image.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/product-thumbnails.php, single-product/product-thumbnails.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/title.php, single-product/title.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/rating.php, single-product/rating.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/price.php, single-product/price.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/short-description.php, single-product/short-description.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/meta.php, single-product/meta.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/share.php, single-product/share.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/tabs/tabs.php, single-product/tabs/tabs.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/tabs/description.php, single-product/tabs/description.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/tabs/additional-information.php, single-product/tabs/additional-information.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/product-attributes.php, single-product/product-attributes.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/up-sells.php, single-product/up-sells.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/single-product/related.php, single-product/related.php, woocommerce/
[05-Feb-2016 17:10:47 UTC] Looking for /var/www/html/wp-content/plugins/woocommerce/templates/global/sidebar.php, global/sidebar.php, woocommerce/
如您所见,它从不在woocommerce/templates目录的根目录中查找任何内容。关于为什么该过滤器不适用于single-product.php或content-single-product.php,您有什么想法吗
我目前在插件文件夹的根目录中有一个woocommerce文件夹,其中有一个single-product.php文件,顶部附近有一个die语句,因此我应该立即查看它是否正常工作。我确实把同一个single-product.php文件放在我的主题中的一个woocommerce文件夹中,它在那里工作,但不是来自插件。我应该用另一个钩子吗?请告知。如果您编辑此
$plugin\u path=$this->my\u plugin\u path()。/woocommerce/
到此$plugin_path=$this->my_plugin_path()。/woocommerce/templates/;那会破坏其他的temlplates吗?如果是的话,你可以添加一个If语句,说“如果你在这里找不到,就去那里找”代码>它在哪里记录woocommerce/
在这行的末尾,它会记录woocommerce/templates/
并找到模板,希望如果你
它会显示你认为你有模板的路径吗?查看文档“你的插件/woocommerce/template name”似乎没有添加插件位置函数myplugin\u plugin\u path(){
可能丢失或失败?Steve,我在上面所做的方式会记录每次它调用钩子时的日志。我没有为single-product.php或content-single-product.php调用钩子。在回调函数中编辑代码不会有帮助,因为没有调用钩子。我向WooCommerce提交了一张罚单,他们说他们不支持支持自定义插件开发,他们不支持从插件中使用此功能。我建议这是一个bug,因为woocommerce\u locate\u template挂钩不会直接在他们的woocommerce/templates目录、子文件夹目录中调用任何内容。我们会看看他们怎么说。使用子主题有什么好处吗?你能把你编辑过的pa放进去吗你在inc/template-loader.php或wp-settings.php中可以做的任何事情看起来好像插件正在尝试连接到其中并为你的模板文件夹添加另一个路径。但是,$plugin\u path
或$template\u path
是否会回显任何内容?链接中提到的插件在哪里e> 如果(!$template\u path)$template\u path=$woocommerce->template\u url;
如果您从插件中回显$template\u path
,是否会返回默认路径?脚本似乎会说“如果您在插件目录中找不到该文件,请在默认文件夹中查找”,但从未到达。如果(!$template\u path)有条件,因此它将始终采用您指定的路径。