Как удалить параметры темы Wordpress из дочерней темы - PullRequest
11 голосов
/ 25 января 2012

Я начинаю новые проекты, написав дочернюю тему для темы twentyeleven. Я редко проектирую новую тему, чтобы использовать какие-либо параметры, встроенные в тему twentyeleven (например, цвет фона и т. Д.). Эти остаточные варианты на самом деле ничего не больно, но я хотел бы избавиться от них, поскольку они ничего не делают.

Проблема в том, что параметры темы объявляются в файле functions.php родительской темы, который загружается вместе с (не вместо) файлом functions.php дочерней темы (так что я могу удалить их, но они вернутся позже Обновить).

Есть ли способ удалить или отключить эти параметры темы из моей дочерней темы? Возможно, что-то вроде функции «remove_options ()»? Или, может быть, что-то, что достигнет этого эффекта? Другими словами, вопрос в том, можно ли удалить theme_options БЕЗ удаления / переопределения исходной функции, которая их добавила.

Я уверен, что с достаточным количеством ошибок я могу скрыть эту опцию с помощью CSS или javascript ... но давай.

Ответы [ 4 ]

13 голосов
/ 26 января 2012

После второго раунда копания ...

Это ПОЛНОСТЬЮ просто!

Вы можете пересмотреть мои шаги, запустив здесь , но код довольно понятен:

add_action( 'init', 'remove_crap' );
    function remove_crap() {

    remove_custom_image_header();
    remove_custom_background();
    remove_theme_support('post-formats');
}

Вы можете посмотреть их в кодексе. Remove_theme_support принимает одну из нескольких строк, которые идентифицируют различные параметры (помимо просто постформатных форматов). Единственная проблема, с которой я столкнулся, заключается в том, что их нужно вызывать с помощью ловушки (вы не можете просто выбросить их в functions.php). Я использую init, но, возможно, есть еще один, более подходящий.

Единственное, что я до сих пор не выяснил, - это как удалить ссылку на страницу «Опции темы», которая появляется в разделе «Внешний вид». Я знаю, что он добавлен с add_theme_page(), но, похоже, нет удобного remove_theme_page().

ОБНОВЛЕНИЕ: Я нашел это! Это ОЧЕНЬ плохо документировано, но в конце концов это довольно легко сделать:

add_action('admin_init', 'remove_twentyeleven_theme_options', 11);
     function remove_twentyeleven_theme_options() {
 remove_submenu_page('themes.php', 'theme_options');
}

В моем примере файл themes.php нацелен на меню «Внешний вид», а «theme_options» - это menu_slug, используемый в теме twentyeleven. Очевидно, что эти параметры будут отличаться в зависимости от того, какое меню или подменю вы редактируете. Эта страница укажет вам правильное направление.

ps. Вот как избавиться от шаблонов из родительской темы, которые вы не хотите использовать: ЭТО не является необходимым для моего точного вопроса, но оно тесно связано и, вероятно, полезно для всех, кто пытается сделать то, что я делаю.

9 голосов
/ 06 февраля 2013

Правильный способ удалить поддержку темы, добавленную в родительской теме, из дочерней темы - это вызвать функцию remove_theme_support в действии after_setup_theme, вызываемом с более низким приоритетом, чем у родительского объекта.

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

Таким образом, добавив дочернее действие с более низким приоритетом, вы можете убедиться, что оно вызывается после вызова родителя того же действия.

Итак:

// added to child's functions.php    

add_action( 'after_setup_theme', 'child_after_setup_theme', 11 ); 
// Parent theme uses the default priority of 10, so
// use a priority of 11 to load after the parent theme.

function child_after_setup_theme()
{
    remove_theme_support('custom-background');
    remove_theme_support('custom-header');
    remove_theme_support('post-formats');
    // ... etc.
}

В случае темы twentyeleven вы также можете просто переопределить всю функцию twentyeleven_setup в файле functions.php вашего ребенка, но это довольно неубедительный способ достиженияэто.

1 голос
/ 06 мая 2014

Это старая ветка, поэтому я просто хочу добавить, если кто-то входит в это место и хочет получить ответ. Я решаю дочернюю тему, беря именно этот файл, создавая копию и добавляя ее в дочернюю тему. У меня есть плагин «расширенный редактор кода», поэтому мне не нужно идти по FTP. Скопируйте конкретный файл, который вы хотите отредактировать, создайте новый лист в дочерней теме с тем же именем и содержимым, а затем внесите необходимые изменения. Сначала будут загружены файлы дочерней темы, и ваш сайт будет обновлен.

1 голос
/ 25 января 2012

К сожалению, способ наследования тем в Wordpress работает так, что функции дочерней темы просто «добавляются» в функции родительской темы.

В отличие от style.css, functions.php дочерней темы не переопределяет своего аналога родительского. Вместо этого он загружается в дополнение к родительскому functions.php. (В частности, он загружается прямо перед файлом родителя.) (1)

Таким образом, в прямом ответе на ваш вопрос выше, выглядит (2), что это может быть невозможно при использовании WordPress тем и дочерних тем.

Лично я бы не беспокоился о наличии этих дополнительных функций или переменных в файле functions.php.

  1. http://codex.wordpress.org/Child_Themes
  2. http://wordpress.org/support/topic/theme-options-in-child-theme
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...