WordPress модифицирует родительский код

Мне сказали, что дочерние темы — это то, что нужно, но вы должны изо всех сил стараться не трогать родительские файлы шаблонов и вносить изменения с помощью хуков действий / фильтров. Однако часто я обнаруживаю, что мне нужно вставить <div class="myclass"> или что-то подобное в место, где нет существующего хука.

Есть ли лучший способ изменить родительский код? Я считаю, что проще всего просто скопировать файл, который я хочу изменить, например, header.php, а затем внести необходимые изменения. Конечно, если родительская тема будет обновлена, мой header.php будет устаревшим, и найти изменения будет больно!


person Ty Le    schedule 23.03.2011    source источник
comment
К сожалению, я думаю, что вы уже используете лучший/единственный вариант.   -  person Phil    schedule 23.03.2011
comment
Возможно, вам повезет больше здесь: wordpress.stackexchange.com   -  person Rob Sobers    schedule 23.03.2011
comment
Теоретически мне имеет смысл сказать PHP найти элемент HTML (по идентификатору или как-то так) и вставить туда код. Почему кажется, что этот метод вообще не используется?   -  person Ty Le    schedule 24.03.2011


Ответы (2)


Есть лучшие способы использования дочерних тем, которые не требуют копирования файлов из родительской темы и их взлома.

Тематические рамки

Вы, вероятно, уже сталкивались с тематическими фреймворками, такими как Thesis, Carrington или Thematic.

Идея фреймворка темы заключается в том, что он даст вам гибкую основу для разработки дочерней темы за счет:

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

http://codex.wordpress.org/Theme_Frameworks

Переопределение функций

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

Вот несколько примеров для Thematic framework (я использовал Thematic в недавнем проекте):

Так что все, что вам нужно изменить в дочерней теме, это ваши style.css и functions.php. Это позволяет вашей теме продолжать работать даже при обновлении Wordpress и основной родительской темы.

person Ciaran    schedule 23.03.2011

Вот что я сделал. Это не самое чистое решение, но оно работает.

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

$whole_file = file_get_contents(__DIR__ . "/../parent/header.php"); // Load the header file and convert to string
$predecessor_line = '<body id="for-example">'; // We're inserting our code right after this line. As long as the parent theme doesn't update this line, we're good.
$split_file = explode($predecessor_line, $whole_file); // Slice the file at the $predecessor_line (The text used to slice disappears, so be sure to add it again)
$code_to_insert = '<div class="myclass">'; // This is the code you want to insert.
$new_file_content = $split_file[0] . $predecessor_line . $code_to_insert . $split_file[1]; // Piece everything together
$new_file = fopen("_temp_header.php", "w"); // Create a Temporary File
fwrite($new_file, $new_file_content); // Write The Temporary File
fclose($new_file); // Close the Temporary File
include("_temp_header.php"); // Include the Temporary File to execute
unlink("_temp_header.php"); // Delete the Temporary File
person Leslie Knepp    schedule 22.02.2018