Php 如何在不编辑核心文件的情况下更改Wordpress核心数据库功能?
我已经和这个问题斗争了好几天了&我非常感谢比我更有经验的(PHP/Wordpress)开发人员的意见 我正在为Wordpress制作调试插件,但我需要更改的错误之一来自此文件: 我需要更改结构,并在第1363行和第1366行的Php 如何在不编辑核心文件的情况下更改Wordpress核心数据库功能?,php,wordpress,oop,Php,Wordpress,Oop,我已经和这个问题斗争了好几天了&我非常感谢比我更有经验的(PHP/Wordpress)开发人员的意见 我正在为Wordpress制作调试插件,但我需要更改的错误之一来自此文件: 我需要更改结构,并在第1363行和第1366行的$error\u str中添加更多信息,以便输出更适合我们的日志读取器,并包含更多有用的信息 为此,我想我需要更改第1344行中的print\u error() 问题是: 这个文件是Wordpress的核心文件,所以我不能直接编辑它 它还有一个全局$wpdb变量,用于调用
$error\u str
中添加更多信息,以便输出更适合我们的日志读取器,并包含更多有用的信息
为此,我想我需要更改第1344行中的print\u error()
问题是:
这个文件是Wordpress的核心文件,所以我不能直接编辑它
它还有一个全局$wpdb
变量,用于调用:$wpdb->query()
&$wpdb->get_row()
(也是同一文件和类中的核心函数),这两个变量依次调用print_error()
函数
其他插件正在使用这些功能&我不能破坏它们的功能,但我也应该更改它们的输出
我认为最有可能的解决方案是继承并覆盖打印错误()
(也可能是query()
,get_row()
,这样我就可以将它们重新定向到我的新print_error()
),但其他插件正在使用$wpdb
,这些函数,我可以(应该)也更改这些插件的错误日志()
输出,但我也不能编辑这些插件&我不能用错误的解决方案把它们搞乱
问题:
- 如何替换
打印错误()
- 最好的方法是什么李>
- 如何处理全局
$wpdb
变量
- 你们有没有更好的解决办法?我将非常感激
链接到print\u error()
文档(带源代码):
直接链接到源代码:不完全确定这是一个好主意,但您可以扩展wpdb
类并替换全局$wpdb
对象
例如
官方。因此,如果您的插件需要更改db功能,它需要包括该文件和可能的自定义安装说明因此在YourWpdbClass()中
我将覆盖的print\u error()函数放在里面?(难道不是要保存原始的$wpdb
对象吗?)还是要将print\u error()
放入wp\u set\u wpdb\u vars()
?您的wpdb类应该扩展\wpdb
,并重写需要重写的方法。显然,您需要小心不要破坏现有的功能,可能还需要直接调用父方法。@Sebastian您能够测试这个吗?(抱歉延迟)是&否,它可以正常工作。只要周围的函数在作用域内,它就可以工作,但当函数完成时,它会返回到它的原始状态,因此我只能在自己的函数中使用它,在这里我重写$wpdb
变量,但我无法捕获其他插件的错误,例如:公共静态函数ou function(){global$wpdb;$wpdb=new YourWpdbClass();//working}//not working
当然,只有在db.php
文件中定义$wpdb,它才会起作用。请直接在这里发布代码,而不是链接到它。我们所需要的只是与您的问题相关的部分。谢谢。@Justin他们没有“链接到他们的代码”,但他们正在使用的CMS代码。@Justin R,不幸的是,我不允许发布我的代码,因为我有NDA(保密协议)合同,必须小心我共享的内容。
global $wpdb;
$wpdb = new YourWpdbClass(); // you can override methods here to your heart's content
wp_set_wpdb_vars();