PHP – переопределить существующую функцию

Могу ли я обновить существующую функцию с тем же именем, но с другим кодом? Или как-то «отключить» старую функцию?

Я хочу переопределить основную функцию WordPress, но так как плагины и тема часто называют эту функцию, мне нужно сохранить одно и то же имя функции.

Только если вы используете что-то вроде APD, которое расширяет движок zend, чтобы это можно было сделать:

вступление

Переопределить метод Docs

Примечание. Runkit кажется лучшим вариантом, чем APD, поскольку он более специфичен для этой цели и позволит вам сохранить оригинальный метод неповрежденным на другом адресе.

Вы можете использовать крючки WordPress (называемые фильтрами и действиями), а затем использовать add_filter() для переопределения функции, которую вы используете.

т.е.

 function function_name() { //code goes here } $hook = 'get_options'; // the function name you're filtering add_filter( $hook, 'function_name' ); 

Кодекс очень поможет в этом.

http://codex.wordpress.org/Plugin_API/Filter_Reference

Просто прокомментируйте старую функцию и напишите свой новый;)

В PHP невозможно переопределить или перегрузить (т. Е. Определить функцию с тем же именем, но с разными параметрами) функцию изначально. Хотя существуют расширения, такие как runkit, которые позволяют переопределять функции ( runkit_function_redefine ), но вы, вероятно, не хотите их использовать (такие расширения редко устанавливаются и в основном ненадежны).

Вы можете обернуть блок, определяющий исходную функцию, в условной проверке, если другое одноименное имя еще не определено (я предполагаю, что вы имеете в виду функции WordPress, а не ключевые PHP-версии)

  <?php if(!function_exists('function_name')){ //old definition here } ?> 

Затем вы можете переопределить его выше, сохранив при этом оригинал, если вам нужно будет вернуться к нему.

В зависимости от того, насколько сложны изменения и сколько раз вы можете это сделать, вы также можете посмотреть в пространствах имен, если вы находитесь на PHP 5.

Мое решение заключалось в следующем:

 function suffusion_get_image($options = array()) { include_once ABSPATH.'wp-content/themes/suffusion-child/functions/media.php'; return childtheme_overide_suffusion_get_image($options = array()); .... } 

Очевидно, что при обновлении есть накладные расходы, так как вам нужно будет снова добавить строки в скрипты, и я успешно использовал этот метод на сегодняшний день, но теперь get_terms сделать это с помощью get_terms в wp- get_terms и нажав на проблему с get_terms выпуском, которую я пытаюсь для разрешения или обхода в настоящий момент.

Моя причина для редактирования ядра заключается в том, что существующее ядро ​​не обеспечивает удобный способ для многозадачного требования.

Кто-то только что предложил на другом форуме, но используя override_function но руководство написано так, что оно, по-видимому, полезно только для встроенных функций – я понял, что это означает, что PHP встроен в функции