Могу ли я обновить существующую функцию с тем же именем, но с другим кодом? Или как-то «отключить» старую функцию?
Я хочу переопределить основную функцию 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' );
Кодекс очень поможет в этом.
Просто прокомментируйте старую функцию и напишите свой новый;)
В 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 встроен в функции