Как изменить функцию ядра БД Wordpress без редактирования файлов ядра? - PullRequest
0 голосов
/ 02 ноября 2018

Я борюсь с этой проблемой уже несколько дней, и я был бы признателен разработчикам (PHP / Wordpress), которые более опытны, чем я.

Я делаю плагин отладки для Wordpress, но одна из ошибок, которую мне нужно изменить, происходит из этого файла: / сайт / открытый / WP-включает / сор-db.php

Мне нужно изменить структуру и добавить больше информации к $error_str в строках 1363 и 1366, чтобы выходные данные лучше подходили для нашей программы чтения журнала и содержали больше полезной информации.

Для этого, я думаю, мне нужно изменить print_error() в строке 1344

Проблемы:

  1. Что файл является основным файлом в Wordpress, поэтому я не могу редактировать его напрямую.
  2. Он также имеет глобальную переменную $wpdb, которая используется для вызова: $wpdb->query() & $wpdb->get_row() (также основные функции в одном файле и классе), которые в свою очередь вызывают функцию print_error().
  3. Другие плагины используют эти функции, и я не могу испортить их функциональность, но я должен также изменить их вывод.

Я думаю, что наиболее вероятным решением является inherit & override print_error() (и, возможно, также query() & get_row(), чтобы я мог перенаправить их на мой новый print_error()), но другие плагины используют $wpdb & those functions, я могу (должен) изменить вывод error_log() для этих плагинов, но я не могу редактировать эти плагины и не могу испортить их с ошибочным решением.

Вопросы:

  • Как мне заменить print_error()?
  • Каков наилучший способ сделать это?
  • Как мне работать с глобальной переменной $wpdb?
  • У кого-нибудь из вас есть лучшее решение? Я был бы очень признателен.

Ссылка на документацию print_error() (с исходным кодом): https://developer.wordpress.org/reference/classes/wpdb/print_error/

Ссылка непосредственно на исходный код: https://core.trac.wordpress.org/browser/tags/4.9.8/src/wp-includes/wp-db.php#L1344

1 Ответ

0 голосов
/ 02 ноября 2018

Не совсем уверен, что это отличная идея, но вы можете расширить класс wpdb и заменить глобальный $wpdb объект.

1007 * Е.Г. *

global $wpdb;
$wpdb = new YourWpdbClass(); // you can override methods here to your heart's content
wp_set_wpdb_vars();

Официально, способ заменить глобальный $wpdb - создать файл db.php внутри wp-content. Поэтому, если вашему плагину нужно изменить функциональность БД, ему нужно будет включить этот файл и, возможно, пользовательские инструкции по установке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...