WordPress модифицирующий родительский код - PullRequest
0 голосов
/ 23 марта 2011

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

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

Ответы [ 2 ]

1 голос
/ 23 марта 2011

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

Каркасы тем

Возможно, вы столкнулись с каркасами тем, такими как Thesis,Carrington или Thematic before.

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

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

http://codex.wordpress.org/Theme_Frameworks

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

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

Вот несколько примеров для тематической платформы (IИспользовал Thematic в недавнем проекте):

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

0 голосов
/ 23 февраля 2018

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

Следующий файл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...