it-swarm.com.ru

Можно ли отключить функцию родительской темы?

Мне было интересно, возможно ли полностью отключить функцию, которая вызывается в functions.php родительской темы, и если да, то как? (Конечно, без удаления функции. Скорее, добавив что-то в functions.php дочерней темы.)

4
Bram Vanroy

Только при некоторых обстоятельствах.

  1. Если функции родительской темы заключены в условные выражения function_exists, вы сможете заменить их. Например:

    // Parent
    if (!function_exists('p_wpse_95799')) {
      function p_wpse_95799() {
        // 
      }
    }
    

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

  2. Если функция "подключена" к какому-либо фильтру или действию, вы можете отменить ее. Есть подвох. Дочерняя тема functions.php загружается первой, что означает, что вы, возможно, не сможете удалить фильтры напрямую. Вам нужно будет подключить их для запуска после запуска родительского functions.php. В противном случае вы будете пытаться удалить то, что не было добавлено. Из Кодекса: "Стоит также отметить, что вам может понадобиться расставить приоритеты удаления фильтра в ловушку, которая происходит после добавления фильтра. Вы не можете успешно удалить фильтр до того, как он был добавлен". В основном это будет означать нахождение ловушки, которая запускается после родительского functions.php, и подключение к ней, возможно, манипулируя третьим параметром add_action или add_filter , чтобы заставить вашу функцию работать поздно.

Это те случаи, о которых я могу подумать прямо сейчас. Возможно, я забыл случай. Я надеюсь, что кто-то укажет на это, если у меня есть :)

Уровень "удалить функцию" уровня PHP отсутствует, и если вы попытаетесь определить две функции с одинаковым именем, вы получите ошибку.

Поскольку я не вижу кода для функции, которую вы хотите удалить, я беспокоюсь, что вы собираетесь что-то сломать, удалив или изменив это, если это вообще возможно. Небольшая осторожность в порядке.

8
s_ha_dum

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

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

По сути, вы захотите использовать remove_action или remove_filter в файле function.php вашей дочерней темы и запускать его после настройки темы.

0
Jared Sulzdorf