我想在我的父主题中的PHP文件中进行简单的修改:
wp-content\themes\sailing\inc\widgets\gallery\tpl\base.php
所以我在我的子主题中创建了相同的文件夹结构,并在此文件中进行了我需要的修改。我还复制/粘贴了声明这个小部件所需的所有PHP文件。
wp-content\themes\sailing\inc\widgets\widgets.php
wp-content\themes\sailing\inc\widgets\gallery\gallery.php
wp-content\themes\sailing-child\inc\widgets\widgets.php
wp-content\themes\sailing-child\inc\widgets\gallery\gallery.php
我在这里缺少什么?
答案 0 :(得分:6)
所以,由于@ 2Fwebd的答案有点不完整(如评论中所标注),这里有一个更完整的答案(只是为了让它比答案及其评论更清晰。)我建议编辑他的答案,但虽然它不被接受,但这是一个更完整的答案:
WordPress子主题不是这样的。您可以在子主题中使用相同路径覆盖的唯一文件是" basic" files:index.php,page.php,style.css ...主要是模板文件。
涉及覆盖子主题中的函数或类。您有几种方法可以处理它:
但这取决于你的主题是如何构建的,以及它是否是儿童主题"准备。让我们看一下您的小部件问题。
如果您在父主题中打开小部件声明文件,您会看到类似的内容:
class Widget_Name extends WP_Widget {
...
CODE OF THE WIDGET
...
请参阅:https://codex.wordpress.org/Widgets_API
理想的情况是,您首先看不到上述行,但是:
if(!class_exists('Widget_Name')) {
class Widget_Name extends WP_Widget {
...
CODE OF THE WIDGET
...
这意味着,你可以复制/过去你的文件并且工作得很好,你的小部件将覆盖父小部件,并且不会抛出任何错误,因为父小部件不会被执行。这就是“儿童主题准备好了”#34;主题。请注意,它与函数(if(!function_exists('function_name')
)相同。
请勿忘记从您的child-theme / functions.php文件中调用您的文件,因为默认情况下不会调用该文件。
像:
require_once('path/to/your/widget_class.php');
其他方式,如果您没有class_exists,则调用只是复制文件,请使用require_once调用它。当您定义同一类的2倍时,您应该会看到错误。 PHP不会让这种情况发生,致命的错误。
重命名:
class Widget_Name2 extends WP_Widget {
然后,将parent::_construct
中的id_base更改为唯一ID(如下所示:
parent::__construct( 'new_uniq_id', 'name of your widget', ...)
在你的文件的某个地方(大部分时间),查找register_widget(并编辑类名:
register_widget( 'Widget_Name2' );
这不是最方便的方式,因为你有2倍相同的小部件,但确实有效。
希望它有所帮助。