Wordpress覆盖CM Tooltip插件函数

时间:2015-12-07 10:01:20

标签: php wordpress plugins

我想自定义CM tooltip插件的行为。 从我在代码中看到的插件是一个具有以下过滤器的类,它们是一种自描述的。

    class CMTooltipGlossaryFrontend {

        /*
         * FILTERS
         */
            add_filter('get_the_excerpt',array(self::$calledClassName,'cmtt_disable_parsing'), 1);
            add_filter('wpseo_opengraph_desc', array(self::$calledClassName, 'cmtt_reenable_parsing'), 1);

        /*
         * Make sure parser runs before the post or page content is outputted
         */
            add_filter('the_content', array(self::$calledClassName, 'cmtt_glossary_parse'), 9999);
            add_filter('the_content', array(self::$calledClassName, 'cmtt_glossary_createList'), 9998);
            add_filter('the_content', array(self::$calledClassName, 'cmtt_glossary_addBacklink'), 10000);
}

我想根据我的需要启用/禁用解析功能(帖子类型等)。

插件代码具有get_the_excerpt过滤器,用于检查某些条件并禁用解析。当wpseo_opengraph_desc被激活时,它可以重新解析。实际解析发生在cmtt_glossary_parse函数中。

我写了一个新的插件并尝试了以下内容:

  1. 我编写了具有更高优先级的cmtt_disable_parsing函数

    add_filter('get_the_excerpt', array($this, 'cmtt_disable_parsing'), 100);
    
  2. 我写了我的cmtt_glossary_parse函数来检查条件,然后调用CMTooltipClossaryFrontent :: cmtt_glossary_parse函数

     add_filter('the_content', array($this, 'cmtt_glossary_parse'), 10008); 
     
  3. 但它们都不起作用。此外,当我在我的插件中实例化原始插件时,原始插件无法正常工作(它不解析内容)

    如何正确定制插件功能,我们将不胜感激。 我应该创建一个新的插件还是将代码放在functions.php中更好? 实例化一个插件类并调用它的方法是不是很糟糕,让我们说另一个插件?

1 个答案:

答案 0 :(得分:2)

最后,我为我找到了一个有效的解决方案。所以我在这里删除一行,以防其他人发现它有用。

我读了这篇https://iandunn.name/the-right-way-to-customize-a-wordpress-plugin/指南,该指南描述了某人的替代方案,如果他想覆盖插件功能。

在我的情况下,解决方案类似于"覆盖他们的回调"部分。我下载了他的示例,它覆盖了google-authenticator插件,并遵循了几乎相同的策略。

特别是对于cm tooltp插件,我想自定义删除原始挂钩并重新添加它们,如果符合我的要求,我就可以使用。

remove_filter('the_content', array(CMTooltipGlossaryFrontend::$calledClassName, 'cmtt_glossary_parse'), 9999);
remove_filter('the_content', array(CMTooltipGlossaryFrontend::$calledClassName, 'cmtt_glossary_createList'), 9998);
remove_filter('the_content', array(CMTooltipGlossaryFrontend::$calledClassName, 'cmtt_glossary_addBacklink'), 10000);

并注册我的回调,如果使用以下代码

满足我的要求,则再次启用原始插件函数
//if (my_condition)
add_filter('the_content', array(CMTooltipGlossaryFrontend::$calledClassName, 'cmtt_glossary_parse'), 9999);
.....