自定义插件中的插件功能

时间:2013-10-17 作者:Salvatore Dibenedetto

我正在尝试使用插件函数(wp-bannerize() ) 在我的自定义插件中。但当我写作时:

if( function_exists(\'wp_bannerize\') ){
            echo "exist";
        }else{
            echo "not exist";
        } 
输出为not exists

如何在自定义插件中获取此函数?

更新时间:

下面是我的插件代码:

class Infinite_posts{

    public function __construct() { 

        add_action(\'wp_ajax_is_bannerize\', \'load_plugins\');
//when plugin receive an AJAX call with \'is_bannerize\'parameter load_plugins() is triggered

    }

    public function load_plugins(){
        add_action( \'plugins_loaded\', \'show_bannerize\' );
//when all plugin are loaded show_bannerize() is triggered
    }

    public function show_bannerize(){
        if( function_exists( \'wp_bannerize\' ) ) {
            echo "exist";
        } else {
            echo "not exist";
        }       
    }
}

if( !is_admin() )
    $infinitePosts = new Infinite_posts();
这里也是我的javascript:

$(\'.gallerie h2\').on(\'click\', function(){
  jQuery.post(
      \'http://localhost/~sdibenedetto/d-art/htdocs/wp-content/plugins/infinite-posts/infinite-posts.php\', 
      {
          \'action\': \'is_bannerize\',
          \'data\':   \'foobarid\'
      }, 
      function(response){
          alert(\'The server responded: \' + response);
      }
  );

});
这是正确的吗?如何进行AJAX调用并传递参数“is\\u bannize”来触发插件?使用此javascript,我在警报中出现以下错误:

<b>Fatal error</b>:  Call to undefined function add_action() in <b>/Users/sdibenedetto/Sites/d-art/htdocs/wp-content/plugins/infinite-posts/infinite-posts.php</b> on line <b>44</b><br />
请帮忙。谢谢

2 个回复
SO网友:Dero

你可能太早结账了。在尝试访问插件提供的方法之前,请确保已加载所有插件。你可以加入plugins_loaded 确保在尝试使用插件定义的功能之前加载所有插件的操作。

class My_Plugin {
    public static function init() {
        if( function_exists( \'wp_bannerize\' ) ) {
            echo "exist";
        } else {
            echo "not exist";
        } 
    }
    public function __construct() { ... }
}
add_action( \'plugins_loaded\', array ( \'My_Plugin\', \'init\' ), 10 );

SO网友:s_ha_dum

您的语法错误。不能像这样钩住对象方法:

add_action(\'wp_ajax_is_bannerize\', \'load_plugins\');
你需要像这样钩住他们:

add_action(\'wp_ajax_is_bannerize\', array($this,\'load_plugins\'));
我真搞不懂你是怎么得到输出的。

其次,您直接调用插件文件。不要那样做。通过这样的直接URL加载文件--http://localhost/~sdibenedetto/d-art/htdocs/wp-content/plugins/infinite-posts/infinite-posts.php-- 将导致文件加载到WordPress上下文之外。您将遇到各种“未定义函数”错误和其他功能问题。您的类似乎正在尝试使用AJAX API 但您的Javascript不是。您需要使用API。

纠正这些问题,如果还有其他问题,请返回。

结束