Перезаписать модуль в дочерней теме

Я изменяю модуль в теме и добавляю его в дочернюю тему. Этот модуль не шаблон страницы, а файл PHP. Я поместил файл в той же иерархии в дочерней теме, что и в родительской теме, но WordPress не выбрал файл дочерней темы. Как заставить это работать?

0

Решение

Дочерние темы предназначены для переопределения шаблоны. Шаблоны обычно включены в get_template_part() который в основном использует следующую функцию:

/**
* Retrieve the name of the highest priority template file that exists.
*
* Searches in the STYLESHEETPATH before TEMPLATEPATH and wp-includes/theme-compat
* so that themes which inherit from a parent theme can just overload one file.
*
* @since 2.7.0
*
* @param string|array $template_names Template file(s) to search for, in order.
* @param bool         $load           If true the template file will be loaded if it is found.
* @param bool         $require_once   Whether to require_once or require. Default true. Has no effect if $load is false.
* @return string The template filename if one is located.
*/
function locate_template($template_names, $load = false, $require_once = true ) {
$located = '';
foreach ( (array) $template_names as $template_name ) {
if ( !$template_name )
continue;
if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
$located = STYLESHEETPATH . '/' . $template_name;
break;
} elseif ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
$located = TEMPLATEPATH . '/' . $template_name;
break;
} elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
$located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
break;
}
}

if ( $load && '' != $located )
load_template( $located, $require_once );

return $located;
}

Как вы видете, STYLESHEETPATH (путь дочерней темы) проверяется перед путем шаблона. Но вы должны включить файл как шаблон.

Невозможно переопределить произвольные файлы PHP дочерними темами. Вы также не отменяете родительский functions.php, а расширяете его.

Что вы можете сделать, чтобы решить вашу проблему:

  1. Включить новые функциональные файлы PHP с require() или же include() в твоих дочерних темах functions.php
  2. Подключите ваши родительские функции тем с add_filter или же add_action
  3. Если все это не помогает, потрудитесь с разработчиками родительской темы, чтобы увеличить ее расширяемость.
0

Другие решения

Других решений пока нет …