【问题标题】:Removing action added by a plugin in Wordpress删除由 Wordpress 中的插件添加的操作
【发布时间】:2016-01-21 23:29:24
【问题描述】:

我正在为 Wordpress 使用 Popup Maker 插件,并且我正在尝试使用子主题的 functions.php 文件阻止它加载到特定页面上。

我在插件目录中找到了 popup-maker.php 文件,该文件末尾包含以下行:

 add_action( 'plugins_loaded', 'popmake_initialize', 0 );

如果我删除/评论这一行,弹出窗口将不会触发,所以我想这是我需要删除的操作。我已经阅读了 WP codex 和许多帖子,但仍然无法正常工作。

现在我被困在这个(我在我的子主题的functions.php文件中添加的函数):

function remove_popmaker() {
    remove_action('plugins_loaded', 'popmake_initialize', 0);
    }

add_action( 'init', 'remove_popmaker', 1 );

PS:我正在使用 shopkeeper 主题和 Woocommerce。

感谢所有帮助,谢谢。

【问题讨论】:

    标签: wordpress hook action


    【解决方案1】:

    您正在向init 添加一个操作,该操作位于plugins_loaded 之后,因此您无法在操作运行后删除它。

    您可以尝试相同的操作,但您必须通过插件执行此操作

    remove_action( 'plugins_loaded', 'remove_popmaker', 0 );
    

    但我怀疑在你之前添加的操作将在之后运行,如果不是,这可能是不可预测的,否则你可能需要编写一个 MUplugin(谷歌这个)。

    【讨论】:

    • 是否可以将操作添加到 plugins_loaded 之前调用的钩子中? (在functions.php中,而不是为这个任务编写一个插件?)。谢谢。
    • 不,如果来自主题,它将在钩子运行之后,如果来自插件,您可以尝试不添加操作的功能,但如果您要删除的操作尚未添加然而,它什么也做不了。没有明显的钩子可以使用。但是,或者您可以查看要删除的特定功能,在插件阶段运行的东西很少见,通常会在加载过程的后期添加操作。
    • 谢谢。告诉我我需要通过插件来完成是关键。
    • 好答案。事实上,我已经测试过 plugins_loaded 不能在主题中调用。操作顺序的有用参考:codex.wordpress.org/Plugin_API/Action_Reference
    【解决方案2】:

    我有办法做到这一点:

    add_action('wp', 'disableEmailPopup');
    function disableEmailPopup () {
        global $post;
        if ($post->ID === 11625249) return remove_action( 'wp_enqueue_scripts', 'popmake_load_site_scripts');
    }
    

    【讨论】:

    • 这适用于特定操作wp_enqueue_scripts。正如@David 解释的那样,从主题中删除操作plugins_loaded 是不可能的。
    【解决方案3】:

    @BMM - 在不知道为什么需要在一个页面上禁用整个插件的用例的情况下,很难给你最好的答案。

    例如,如果您只是希望单个弹出窗口不在一个页面上显示,您可以使用条件面板通过 (!) 按钮添加否定条件。单击它会将其变为红色,您将检查与条件相反的情况,因此(!) Page Selected: Page xyz 将阻止它在该页面上加载。

    您也可以create your own custom conditions 允许您将该条件添加到任何弹出窗口。

    最后,如果您只想从前端解开它,您可以简单地删除渲染和脚本处理程序

    remove_action( 'wp_footer', 'popmake_render_popups', 1 );
    remove_action( 'wp_head', 'popmake_script_loading_enabled' );
    

    如果你也想阻止查询

    remove_action( 'wp_enqueue_scripts', 'popmake_preload_popups', 11 );
    

    希望对您有所帮助。

    【讨论】:

    • 删除plugins_loaded 操作的常见用例是覆盖纯主题插件操作,据我了解,这可能是 OP 的意图。很遗憾,您的建议对此类用例没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多