2012-01-24 2 views
7

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

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

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

Я уверен, что с достаточным рифлением я мог бы скрыть вариант с помощью CSS или javascript ... но c'mon.

ответ

12

После второго раунда рытье ...

Это ПОЛНОСТЬЮ легко!

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

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. Очевидно, что эти параметры будут отличаться в зависимости от того, какое меню или подменю вы редактируете. This page укажет вам в правильном направлении.

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

+2

Ни один из этих предложений на самом деле не является «правильным» способом достижения этого - функции remove_ * все устарели в пользу remove_theme_support, а init слишком поздно для вызова этих функций - должно быть в "after_setup_theme". Параметр «remove_submenu_page» просто скрывает меню, но фактически не отключает поддержку. Правильный способ сделать это - в действии after_setup_theme с приоритетом ниже 10 (например, 11 или более), чтобы убедиться, что он выполняется после вызова родителя after_setup_theme (при условии, что родительская тема использует приоритет по умолчанию 10). Я отправлю новый ответ для справки. –

+0

Спасибо за это, SDP. Мне было интересно, знаете ли вы, как удалить только одну вкладку с параметром * one * из родительской темы, а не для панели «options options»? Мой вопрос подробно описан здесь, если у вас есть время, чтобы посмотреть на него: http://wordpress.stackexchange.com/questions/138584/how-do-imove-a-parents-theme-option-tab-through- the-child-theme – J82

1

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

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

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

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

  1. http://codex.wordpress.org/Child_Themes
  2. http://wordpress.org/support/topic/theme-options-in-child-theme
+0

Спасибо, но это не очень полезно, потому что он в основном повторяет исходный вопрос. – emersonthis

+0

Я считаю, что ответ кроется в том, что дочерние темы не могут удалить родительские функции темы. – summea

+0

Я отредактировал ответ, чтобы включить оригинальный, подразумеваемый ответ. :) – summea

8

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

Файл functions.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 вашего ребенка, но это скорее нетонкий способ достижения этой цели.

+0

Есть ли способ удалить вкладку с параметрами * one * от родительской темы, а не панель «options options»? Мой вопрос подробно описан здесь, если у вас есть время, чтобы посмотреть на него: http: //wordpress.stackexchange.com/questions/138584/how-do-i-remove-a-parents-theme-option-tab-through-the-child-theme – J82

+0

Предположительно, Саймон прав. Это правильный способ его достижения. Однако я не могу заставить его работать в дочерней теме WC Storefront. Не знаю, как удалить этот проклятый код. – retroriff

1

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

Смежные вопросы