Я изменяю модуль в теме и добавляю его в дочернюю тему. Этот модуль не шаблон страницы, а файл PHP. Я поместил файл в той же иерархии в дочерней теме, что и в родительской теме, но WordPress не выбрал файл дочерней темы. Как заставить это работать?
Дочерние темы предназначены для переопределения шаблоны. Шаблоны обычно включены в 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, а расширяете его.
Что вы можете сделать, чтобы решить вашу проблему:
require()
или же include()
в твоих дочерних темах functions.phpadd_filter
или же add_action
Других решений пока нет …