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


Wordpress basic concept - how to extend/override/customize a plugin hook?

我正在一个wordpress网站上工作,我想澄清一个绝对非常重要的基本概念,这就是如何自定义/扩展wordpress挂钩(至少这是我想做的!)

作为现实世界的例子,我正在建立一个wp电子商务网站。当用户将项目添加到购物车时,我希望比原始功能多做一两件事。通过查找来源,我发现:

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

具有以下功能:

function wpsc_add_to_cart()

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

无尽的感谢。

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

您可以使用remove_action钩子删除插件文件中的函数,并在function.php文件中添加add_action来编写自己的代码。这样你就可以从主题的函数.hp.自定义你的插件代码

下面是要解释的例子。我希望这会有所帮助。

http://codex.wordpress.org/Plugin_API

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

我使用了一个有点压抑的通知函数(它存在于我的child主题函数.php页面中),对于那些令人恼火的插件,例如:请设置twitter帐户使用,这种警告在某些阶段没有用处,有时只是不在乎。

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');
}

所以我创建了suppressed notice函数,至少可以创建一个警告,所以我记得。

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

  • 否则,如果函数不存在,或者仍然运行一个新的操作,或者离开本节,那么添加任何内容对测试都很有用,这样你至少可以得到一些反馈。

    您可以尝试什么。。。复制插件文件中的函数,粘贴到您的主题函数.php文件,

    即:

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

    唯一的问题是,如果插件被更新,并且该函数被重命名、删除、更改或其他事情,你可能会开始遇到麻烦。。。

    你能不能要求插件开发人员可能添加你的需求,可能只需少量费用?但如果你把它作为你的主要购物车,那么很有可能,这笔小额投资可能是一件好事。

    Marty