我应该把一个PHP文件从wp-includes复制到哪里,以便在我的子主题中覆盖它?

时间:2014-12-11 作者:IpsRich

我看到了很多关于更换内部物品的问题wp-includes 在任何情况下,都有很多答案是“不要”。然而,我需要改变目前存在的东西!我很乐意复制并更改它,但我不知道放在哪里。我应该做一个wp-includes “我的孩子”主题中的文件夹(与functions.php), 例如我试着把它和我的functions.php 但那里没有人捡到它。

编辑:具体来说,我要做的是修改class-wp-embed.php 在其公共文件中包含额外的行shortcode 作用

2 个回复
SO网友:Matthew Campbell

您不需要更改核心文件。它们是类,这意味着它们可以扩展。这将需要一些腿部工作,但您所需要做的只是加载一个类的实例,然后对其进行扩展/添加。这就是OOP的美妙之处。这就是如果没有一个钩子来修改东西的话,很可能会有。

SO网友:Tom J Nowell

您不应该修改WordPress核心。建议你这样做的人是错误的。原因是,当你更新WordPress时,你失去了所有的更改。这也意味着插件对核心工作如何被您的更改破坏所做的假设。

相反,如果您需要更改核心行为、删除、添加或修改它们,则应该使用操作和过滤器。

E、 g.如果我想在脑海中回响“hello world”,我可以这样做:

add_action( \'wp_head\', function() {
    echo \'hello world\';
} );
虽然这很吸引人class-wp-embed.php 要添加新的oembed提供程序并修改$providers 构造函数中的数组。

或者,您可以进一步向下阅读并找到过滤器:

$this->providers = apply_filters( \'oembed_providers\', $providers );
然后使用它在插件中使用过滤器添加提供者:

add_filter( \'oembed_providers\', function ( $providers ) {
    $providers[\'#http://(www\\.)?youtube\\.com/watch.*#i\'] = array( \'http://www.youtube.com/oembed\', true  );
    return $providers;
} );
最后请注意,任何添加了可以修改内容的功能的内容,例如自定义帖子类型、分类法、短代码、oEmbed,都不应该出现在您的主题中。它们应该在插件中。原因是数据可移植性。用户切换主题的那一刻,他们的所有oEmbed短代码和自定义帖子类型都不再可用,或者停止工作。

最后一点,oEmbed不需要使用短代码,只需将url复制粘贴到编辑器自己的行中,即可将其转换为完全嵌入

结束

相关推荐

阻止在父主题中执行PHP

我已经设置了一个子主题,可以对我的网站进行自定义更改,而不会在每次更新时将其删除。一个更改是删除一个包装器,该包装器在“content hero.php”文件中显示页面标题,周围有大量空白。父文件中的代码为:<div class=\"hero <?php echo edin_additional_class(); ?>\"> <?php if ( ! is_page_template( \'page-templates/front-page.php\' ) ) : ?