编辑一个已经存在的插件来添加更多的功能是个好主意吗?

时间:2014-07-29 作者:Rambo8000

我需要为Wordpress插件添加相对较少的功能,我可以选择直接编辑插件,或者完全废弃插件,并重新利用其他站点的PHP代码来做同样的事情。为这么小的改动重新调整非Wordpress PHP代码的用途似乎很愚蠢,我只有几行PHP代码可以在编辑插件时使用。我的问题是,编辑插件是个好主意吗?

我知道在编辑主题时,如果直接对旧代码进行编辑,当主题更新时,更改将丢失。插件也会发生这种情况吗?有办法解决这个问题吗?

对于那些想知道这些变化有多复杂的人,我将简要解释一下。我的客户希望向经销商和用户提交表单。但在某些情况下,根据用户的电子邮件地址(如果以“.gov”结尾或其他几个结尾…是的,我知道这不是最好的主意,我试图说服客户,但他们坚持认为),客户希望将电子邮件发送给其他人。当然,这可以通过插件中的几行小PHP来解决,但插件没有基于用户发送的内容的“有条件收件人”功能。因此,我想为这个网站添加这个功能(如果可以快速完成的话),或者我想用纯php替换插件,这似乎会导致比最初修复的问题更多的问题。时间至关重要。非常感谢您的帮助!

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

你必须问自己的最重要的问题是,我是这个主题或插件的作者吗。如果您的答案是肯定的,并且您负责插件或主题的维护,请继续更改插件或主题,并根据需要进行修改。

如果你的答案是否定的,那么你就不应该对它做任何更改,即使是像一个简单的点这样的小事也不应该做.. WordPress核心文件也是如此。简单的原因是,正如你所说的,如果主题/插件/核心被更新,你will 失去你对主题/插件/核心所做的一切。

我建议您创建自己的小型functionality plugin 有了这个额外的功能。它快速而简单,并且会在以后为你省去很多眼泪,因为除非你自己去做,否则它不会被覆盖。

SO网友:birgire

一般来说,您不想修改插件,因为下次更新插件时,您将失去修改。主题有点不同,可以设置子主题。

如果插件正在使用wp_mail() 函数发送电子邮件,您可以尝试使用wp_mail 筛选以更改收件人。

尝试编写自己的插件来解决这个问题。

下面是这样一个插件的示例(未测试):

/* Plugin Name: Change recipients for .gov emails */

add_filter( \'wp_mail\', 
    function ( $args ) {

        // Check if the recipent\'s email ends with .gov         
        if( \'vog.\' === strtolower( substr( strrev( $args[\'to\'] ), 0, 4 ) ) )
        {
            // Replace it with a new email address:
            $args[\'to\'] = \'[email protected]\';
        }

        return $args;
    }
);
您可能需要插件提供的一些附加挂钩。

SO网友:Dwayne Charrington

我认为我们这些与Wordpress合作了几年的人在某个阶段犯了这样或那样的错误。我不得不对原作者不再支持的插件进行修改,并且与Wordpress的更高版本存在一些兼容性问题。

在某些情况下,可以编辑您不是原始作者的现有插件:

该插件不再得到维护或支持。该插件存在一些明显的安全问题,可能会危及您的服务器/站点,您不想等待更新而需要该插件。这是我能想到的唯一两种可以接受编辑插件的情况。在理想的情况下,所有Wordpress插件作者都会使用Wordpress中的挂钩/过滤器功能,这样我们就可以轻松地对其进行扩展和更改,而无需编辑插件文件,但正如我们所知,有很多写得很差的插件都不支持挂钩或过滤器。

如果您需要为插件添加更多功能,我的第一条建议是构建您自己的插件并自己编写功能。然而,在某些情况下,您可能希望删除Javascript库并在插件中包含自己的库,但作者决定内联包含,而不使用Wordpress函数。这就是像这样的情况可能变得棘手的地方,因为您必须编辑一两个文件。

在需要编辑插件文件的情况下(这是探索所有其他选项后的最后一种情况),应该在插件目录中保留一个修改文件,我有一个名为“CHANGES.txt”的文件,只需列出更改的文件、行号,如果我有时间,我会列出我所做的事情。如果需要更新并查看更改的内容,则可以区分文件。

万不得已的方法并不理想,它有其缺陷,严重违反了编程法则。但是,正如我所提到的,如果插件写得不好或者不容易在主题或自定义插件中覆盖/扩展,有时需要编辑插件文件。

结束

相关推荐

How can I find plugins' slug?

我想知道如何才能找到插件的slug(slug=WordPress用来更新插件和确定哪些插件当前处于活动状态的内部名称)?它通常是插件的文件夹名,但如果插件没有文件夹,则是其文件名(如hello.php)。是否有其他例外情况?大小写字符重要吗</插件的slug是否可以与其文件夹名不同?如果有一个叫做hello的插件呢。php和另一个/您好。php/您好。php