我被告知儿童主题是要走的路,但是你应该尽量不要触摸父模板文件并通过动作/过滤器钩子进行修改。但是,我经常发现我需要在没有现有挂钩的地方插入<div class="myclass">
或类似物。
有没有更好的方法来修改父代码?我发现最简单的事情就是复制我要修改的文件,例如header.php,然后进行我需要的更改。当然,如果更新了父主题,我的header.php将会过时,找到更改将会很痛苦!
答案 0 :(得分:1)
有更好的方法可以使用不涉及从父主题复制文件并对其进行黑客攻击的子主题。
您可能会遇到像Thesis,Carrington或Thematic之类的主题框架。
主题框架背后的理念是,它将通过以下方式为您的儿童主题开发提供灵活的基础:
http://codex.wordpress.org/Theme_Frameworks
使用主题框架,您可以使用functions.php
轻松覆盖现有功能。这允许您使用自己的自定义代码替换页眉和页脚等常用功能,还可以使用不在所选主题框架中的函数扩展主题。
以下是专题框架的一些示例(我在最近的项目中使用过Thematic):
所以你应该在你的孩子主题中修改你的style.css
和functions.php
。这样即使Wordpress和基础父主题更新,您的主题也能继续运行。
答案 1 :(得分:0)
这就是我的所作所为。这不是最干净的解决方案,但它确实有效。
以下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