我使用catch-base主题作为父主题,并在函数中包含以下代码。php
<?php
function my_theme_enqueue_styles() {
$parent_style = \'catch-base\';
wp_enqueue_style( $parent_style, get_template_directory_uri() . \'/style.css\' );
wp_enqueue_style( \'child-theme\',
get_stylesheet_directory_uri() . \'/style.css\',
array( $parent_style )
);
}
add_action( \'wp_enqueue_scripts\', \'my_theme_enqueue_styles\' );
?>
我一生都不知道如何通过子主题覆盖任何模板文件。我在catchthemes网站上尝试过这个建议,
https://catchthemes.com/blog/create-child-theme-wordpress/ 但是仅仅使用相同的目录结构是行不通的。
我还尝试在“add\\u action”函数之后添加此代码,但它会破坏站点并出现“拒绝访问”错误。
require_once( get_stylesheet_directory() . \'/inc/catchbase-structure.php\' );
我错过了什么?
SO网友:Brandon
catch-base主题将每个函数包装在if语句中,以便在必要时进行修改。
实例
if (! function_exists(\'function_name\')) {
/* some code */
}
所以我最后做的就是把它添加到我的函数中。子主题中的php文件,它重写了函数,并显示了我添加的额外div!
function function_name() {
/* some modified code */
}
SO网友:Tom J Nowell
子主题允许您覆盖通过模板层次结构或get_template_part
例如index.php
或archive.php
.
子主题不能以这种方式替换任意文件,例如CSS文件,functions.php
, 使用时包含的文件require
或include
, 等
如果父主题包含要删除或替换的函数,请选择以下选项:
如果过滤器或动作已添加到父主题中,请将其取消挂钩(请注意,事情发生的顺序很重要,如果尚未添加,则无法取消挂钩!)如果父主题已将函数包装在条件检查中,则重新定义它(不总是可能的,请检查父主题代码以进行检查)
如果父主题提供了设置,则关闭该功能(请注意顺序/优先级,您不能将尚未排队的脚本或样式退出队列!顺序很重要!)很遗憾,没有通用的PHP/WP方法来删除和替换任意PHP函数。如果没有提供执行此操作的机制,则无法执行此操作。