Не могу переопределить функцию.
-
Хочу изменить функцию ‘storefront_credit()’, но когда я копирую ее в functions.php дочерней темы, сайт виснет, хотя в родительской функция введена через ‘if ( ! function_exists( ‘storefront_credit’ ) ) {‘.
Что не так?Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]
-
А что пытаетесь сделать?
Видимо надо удалить функцию и заменить на свой вариантadd_action( 'init', 'custom_remove_footer_credit', 10 ); function custom_remove_footer_credit () { remove_action( 'storefront_footer', 'storefront_credit', 20 ); add_action( 'storefront_footer', 'custom_storefront_credit', 20 ); }
То, что я хотела, я уже сделала по-другому. Я удалила функцию с хука:
‘add_action(‘init’, function() {
remove_action( ‘storefront_footer’, ‘storefront_credit’, 20);’,\
потом дописала в footer.php то, что мне нужно.
Но, Я НЕ ПОНИМАЮ!!!
Если ф-я в родительской теме введена через проверку
‘if ( ! function_exists( ‘storefront_credit’ )’,
то при загрузке родительской темы проверяется, есть ли ф-я с таким названием в дочерней, и, если есть, то родительская просто не выполняется.
Почему мне не удается использовать именно эту функцию в дочерней??на самом деле, очень Хороший Вопрос.
если в Родительской Теме, Функция определена без if(!function_exists) {}, а в Дочерней Теме эта же Функция определена с условием if(!function_exists) {}, то при инициализации сработает Функция из Дочерней Темы.
если в Родительской Теме, Функция определена с условием if(!function_exists) {}, а в Дочерней Теме эта же Функция определена без if(!function_exists) {}, то при инициализации не сработает ни одна из Функций.
если в Родительской Теме, Функция определена с условием if(!function_exists) {}, и в Дочерней Теме эта же Функция определена с условием if(!function_exists) {}, то при инициализации начнется веселуха, будут срабатывать обе Функции.
если в обих Темах Функции определены без if(!function_exists) {}, то наступит колапс.
Это мы еще не говорим о вызове самой Функции из Плагина или из Темы.
если в Родительской Теме, Функция определена с условием if(!function_exists) {}, и в Дочерней Теме эта же Функция определена с условием if(!function_exists) {}, то при инициализации начнется веселуха, будут срабатывать обе Функции.
Это как? Поток, что ли, раздвоится, походя породив еще одну параллельную Вселенную?
В теории (https://wp-kama.ru/handbook/wordpress/loading например) function.php дочерней темы загружается первой, родительской после нее. Поэтому в в дочерней делать проверку несуществования функции (if(!…) смысла нет, родительские функции еще не загружены. А в родительской теме такая проверка отметает функцию, если ф-я с таким названием есть в дочерней теме.
На практике, у меня на сайте работают три переопределенные функции, введенные без всяких if. Но, если с двумя из них проблем не было, то третья сначала вешала сайт, а на следующий день почему-то спокойно начала работать.
Хотела переопределить четвертую, но она вообще не пошла. Вот мне и интересно, в чем дело.сайт виснет, хотя в родительской функция введена через ‘if ( ! function_exists( ‘storefront_credit’ ) ) {‘.
Что не так?а в логах посмотрите, по какой причине сайт виснет то.
при ошибке он должно четко падать, сразу же. а не виснуть.А он и падает (На сайте возникла критическая ошибка.). Простите ошибку в терминологии.
в логах ошибок посмотрите точную причину.
Спасибо, Flector. Все просто. Эту функцию я уже переписывала год назад и она уже была у меня в functions.php. А теперь я ее пыталась туда записать вторично.
Поэтому в в дочерней делать проверку несуществования функции (if(!…) смысла нет, родительские функции еще не загружены.
Я тоже так думал, пока не нарвался на 500 (уже точно не помню в какой ситуации). С тех пор не экономлю эти несколько байтиков.
на самом деле, очень Хороший Вопрос.
Ни одного попадания 🙂
если в Родительской Теме, Функция определена без if(!function_exists) {}, а в Дочерней Теме эта же Функция определена с условием if(!function_exists) {}, то при инициализации сработает Функция из Дочерней Темы.
Нет. Сначала загружается дочерняя тема, затем родительская. Если в родительской нет проверки на существование функции, при повторном определении будет фатальная ошибка.
если в Родительской Теме, Функция определена с условием if(!function_exists) {}, а в Дочерней Теме эта же Функция определена без if(!function_exists) {}, то при инициализации не сработает ни одна из Функций.
Нет. Сработает функция из дочерней темы.
если в Родительской Теме, Функция определена с условием if(!function_exists) {}, и в Дочерней Теме эта же Функция определена с условием if(!function_exists) {}, то при инициализации начнется веселуха, будут срабатывать обе Функции.
Квантовая суперпозиция в PHP? Нет, сработает только функция из дочерней темы, как и в предыдущем случае.
если в обих Темах Функции определены без if(!function_exists) {}, то наступит колапс.
А вот тут верно. Будет фатальная ошибка, как и в первом случае.
- Тема «Не могу переопределить функцию.» закрыта для новых ответов.