Php 如何在不编辑核心文件的情况下更改Wordpress核心数据库功能?

Php 如何在不编辑核心文件的情况下更改Wordpress核心数据库功能?,php,wordpress,oop,Php,Wordpress,Oop,我已经和这个问题斗争了好几天了&我非常感谢比我更有经验的(PHP/Wordpress)开发人员的意见 我正在为Wordpress制作调试插件,但我需要更改的错误之一来自此文件: 我需要更改结构,并在第1363行和第1366行的$error\u str中添加更多信息,以便输出更适合我们的日志读取器,并包含更多有用的信息 为此,我想我需要更改第1344行中的print\u error() 问题是: 这个文件是Wordpress的核心文件,所以我不能直接编辑它 它还有一个全局$wpdb变量,用于调用

我已经和这个问题斗争了好几天了&我非常感谢比我更有经验的(PHP/Wordpress)开发人员的意见

我正在为Wordpress制作调试插件,但我需要更改的错误之一来自此文件:

我需要更改结构,并在第1363行和第1366行的
$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();