Wordpress基本概念 - 如何扩展/覆盖/自定义插件钩子?

时间:2012-02-28 13:40:16

标签: php html wordpress hook

我正在开发一个wordpress网站,并希望澄清一个非常重要的基本概念,这是如何自定义/扩展wordpress钩子(至少这就是我认为我想做!)

作为现实世界的例子,我正在建立一个wp-ecommerce网站。当用户将项目添加到购物车时,我想做一两件比原始功能更多的事情。仔细查看来源,我发现:

/wp-content/plugins/wp-e-commerce/wpsc-includes/ajax.functions.php

功能:

function wpsc_add_to_cart()

我知道我可以在这里简单地编辑代码,但显然这是完全错误的方式,因为当插件更新时,我将失去更改。扩展作为插件或wordpress的一部分的函数的正确方法是什么?

提前无休止地感谢。

3 个答案:

答案 0 :(得分:2)

您可以使用wordpress操作挂钩来解决插件升级时的代码丢失问题。

您可以使用remove_action钩子删除插件文件中的函数,并通过在function.php文件中添加add_action来执行您自己的代码。这样您就可以从theme的function.php。

中自定义插件代码

以下是要解释的示例。我希望它会有所帮助。

http://codex.wordpress.org/Plugin_API

http://themeshaper.com/2009/05/03/filters-wordpress-child-themes/

答案 1 :(得分:2)

我使用了一点抑制通知功能(它存在于我的孩子主题function.php页面中),对于令人烦恼的插件例如:请设置推特账号使用,这种警告在某些阶段没用,有时只是不关心它。

function supressed_notices_active(){
    echo '<div class="error"><p>Supressed Notices are active</p></div>';
}
if(function_exists('the_plugin_custom_function_call')){
    remove_action('the_plugin_custom_function_call' );
    add_action('admin_notices','supressed_notices_active');
}else{
    function test_message_from_me(){
        echo '<h1>show</h1>';
    }
    add_action('admin_notices','test_message_from_me');
}

所以我创建了压制通知功能,至少创建一个警告,所以我记得。

  • 检查目标函数是否与function_exists($target_function) hook
  • 一起存在
  • 然后使用remove_action($tag,$target_function) hook
  • 删除此操作
  • 然后只需使用add_action($tag,$target_function)钩子添加自定义函数(不需要单独的函数,这可能只是一个闭包)

  • 然后如果该函数不存在,或者仍然运行一个新动作或离开这一部分,它可以用于测试只是添加任何东西,所以你至少得到一些反馈。

    答案 2 :(得分:-1)

    您可以尝试...复制插件文件中的功能, 将其粘贴到您的主题functions.php文件

    即:

    function wpsc_add_to_cart() {
        global $wpdb, $wpsc_cart;
        // default values etc..etc..
    
        // new code here?
    }
    

    唯一的问题是,如果插件被更新并且该功能被重命名或删除,更改或者您可能开始遇到麻烦......

    您是否可以要求插件开发人员可能添加您的要求, 可能收取少量费用?但如果你把它当作主要的购物车,那么很有可能,小额投资可能是一件好事。

    玛蒂