如何使用ADD_FILTER覆盖INCLUDE_ONCE指针文件?

时间:2020-01-01 作者:Saeid

我想定制一个插件,它使用一个名为html供应商订单页面的文件。php定义内容样式:

include_once( apply_filters( \'wcpv_vendor_order_page_template\', dirname( __FILE__ ) . \'/views/html-vendor-order-page.php\' ) );
我想创建自己的html供应商订单页面。通过修改此文件,并通过使用add\\u filter强制插件使用此文件。

我想过滤一下__FILE__ 这是指向我的文件的已定义常量。

这可能吗?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

你不能只是过滤__FILE__. 或任何任意函数或变量。只能筛选传递给的值apply_filters(). 在这种情况下wcpv_vendor_order_page_template 可过滤值为:

dirname( __FILE__ ) . \'/views/html-vendor-order-page.php\'
换句话说,它是指向PHP文件的路径。如果要更改加载的PHP文件,可以过滤wcpv_vendor_order_page_template 传递主题中文件的路径。

因此,如果您在中创建此文件的版本wp-content/{yourtheme}/wcpv//views/html-vendor-order-page.php, 您可以让插件加载该版本,如下所示:

add_filter(
    \'wcpv_vendor_order_page_template\',
    function( $path ) {
        return get_theme_file_path( \'wcpv//views/html-vendor-order-page.php\' );
    }
);

相关推荐

Conditional action hooks

我正在开发一个使用AJAX的插件,但我在控制代码流方面遇到了困难。我想在运行条件后挂接函数。我的钩子在控制结构内部添加时不会启动,但在外部会启动。我还有一个触发AJAX请求的事件,这只能在用户点击触发事件后,在加载所有DOM之后发生。AJAX请求告诉PHP函数设置cookie。它设置了cookie,但在阅读关于cookie的PHP文档时,我发现它们只能在发送任何输出后设置,但我还是做到了这一点?我读过WordPress初始化序列,但这并没有帮助我解决这个问题。这是我的密码:add_action(\'wp_