我有一个插件安装在我的WordPress站点。
我想覆盖插件中的一个函数。我可以在主题的functions.php
中覆盖这个函数吗?如果可以,我该怎么做?
下面是我的插件中的原始函数:
/**
* sensei_start_course_form function.
*
* @access public
* @param mixed $course_id
* @return void
*/
function sensei_start_course_form( $course_id ) {
$prerequisite_complete = sensei_check_prerequisite_course( $course_id );
if ( $prerequisite_complete ) {
?><form method="POST" action="<?php echo esc_url( get_permalink() ); ?>">
<input type="hidden" name="<?php echo esc_attr( 'woothemes_sensei_start_course_noonce' ); ?>" id="<?php echo esc_attr( 'woothemes_sensei_start_course_noonce' ); ?>" value="<?php echo esc_attr( wp_create_nonce( 'woothemes_sensei_start_course_noonce' ) ); ?>" />
<span><input name="course_start" type="submit" class="course-start" value="<?php echo apply_filters( 'sensei_start_course_text', __( 'Start taking this Course', 'woothemes-sensei' ) ); ?>"/></span>
</form><?php
} // End If Statement
} // End sensei_start_course_form()
5条答案
按热度按时间6tr1vspr1#
你不能真的“覆盖”一个函数。如果一个函数被定义了,你就不能重新定义或改变它。你最好的选择是创建一个插件的副本,然后直接改变函数。当然,每次插件更新时你都必须重复这个过程。
给予插件一个不同的名字来区分他们在插件列表中。禁用原来的,启用您的副本。
r8xiu3jd2#
您可以通过使用add_filter()函数来实现。
参见wordpress stackexchange: Override plugin with functions.php
只需在主题的
functions.php
文件中添加以下代码。oalqel3c3#
我知道现在说这个有点晚了,但是如果其他人发现了这个帖子。一个简单的解决方案是,如果可以的话,把这个函数复制到你的主题函数文件中,然后重命名它,这样它就不会和原来的函数冲突。然后用你的新函数代替原来的函数。这样你就可以更新插件文件,而不会影响你的修改。
2ledvvac4#
这件事说得有点晚(2021年11月),但今天还是找到了这个答案,所以我再补充一个身边没看到的解决方案:
由于一些历史原因,WP仍然有能力添加在所有其他插件之前运行的“必须使用”插件。所以这给予了我们添加你想要覆盖的函数的机会,这样当原始插件运行时它就已经存在了。
就你而言
1.在文件夹
wp-content/mu-plugins
中添加一个.php文件1.在
custom-override.php
中添加函数:1.请确保原始插件也有这个条件“如果函数还不存在...”
这对我起了作用;- )
PD:我不是Maven,如果有什么问题请给予我一些反馈。谢谢
参考:https://wordpress.org/support/article/must-use-plugins/
2eafrhcq5#
我还需要修改一个WordPress插件的一些代码。所以我创建了一个函数,可以放在你的child-theme的functions.php中。请在使用前测试!因为我不是PHPMaven,所以它可能写得很差。但这个概念对我很有效。我首先在WordPress之外测试了它,所以一些变量,如$root应该/可以修改。
情况是,我不得不改变一些值在两个不同的文件在插件电子邮件帖子订阅.
我需要更改**$home_url = home_url('/');到$home_url = '自定义重定向网址';和“含量=“10;至'内容=“1;**在文件optin.php和unsubscribe.php中。
每次插件更新后都会运行一个函数。这是我使用的代码:
我想这只会在你需要调整一些小东西的时候有用。重写完整的代码可能不适用于这段代码,但是我没有测试过。