如何从其他站点调用WordPress插件中的函数

时间:2014-08-06 作者:arhakim

我创建了一个插件,并将其安装在任何wordpress网站上。出于任何原因,我需要从其他站点(不是wordpress站点)调用这些插件上的函数。

我已经尝试使用cURLfile_get_contents 要调用该函数,在一些wordpress网站上它运行良好,但在另一些wordpress网站上它不工作。

调用函数失败,因为wordpress站点有重定向URL,或者wordpress站点安装了其他插件,如验证码、安全性等。

以下是我的插件中的代码/功能:

Class Myplugin{

 ..........

  function get_wp_version(){
    // to do
  }

  function call_api(){
    if($_GET[\'get_wp_version\'] && $_GET[\'token\']){
       $wp_version = $this->get_wp_version();
       echo $wp_version;
    }
  }
........
}
下面是我用来从另一个站点调用函数的代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, \'http://mysite.com/?call_api=get_wp_version&token=xxx\');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER[\'HTTP_USER_AGENT\']);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
$curl_msg = curl_exec($ch);
任何帮助都将不胜感激!

哎呀,打字错误!我的插件的函数应该是这样的:

Class Myplugin{

 ..........

  function get_wp_version(){
    // to do
  }

  function call_api(){
    if($_GET[\'call_api\'] && $_GET[\'token\']){
      if($_GET[\'call_api\'] == \'get_wp_version\'){
        $wp_version = $this->get_wp_version();
        echo $wp_version;
      }
    }
  }
........
}

1 个回复
SO网友:Sisir

有两种方法可以实现这一点

1。使用AJAX API这是最快的方法。只需注册一个ajax操作并使用该操作url发送请求。

Example

add_action(\'wp_ajax_api-call\', \'wpse_156943_ajax_api_handle_request\');

function wpse_156943_ajax_api_handle_request(){
    // security check validation

    // do whatever you want to do
}
请求的url如下http://example.com/wp-admin/admin-ajax.php?action=api-call

2。创建URL端点创建大量用户友好的端点。例如http://example.com/my-api

Example

add_action( \'wp_loaded\', \'wpse156943_internal_rewrites\' );
function wpse156943_internal_rewrites(){
    add_rewrite_rule( \'my-api$\', \'index.php?my-api=1\', \'top\' );
}

add_filter( \'query_vars\', \'wpse156943_internal_query_vars\' );
function wpse156943_internal_query_vars( $query_vars ){
    $query_vars[] = \'my-api\';
    return $query_vars;
}

add_action( \'parse_request\', \'wpse156943_internal_rewrites_parse_request\' );
function wpse156943_internal_rewrites_parse_request( &$wp ){

    if (!array_key_exists( \'my-api\', $wp->query_vars ) ) {
        return;
    }

    // security and validation 

    // do whatever you want to do

    die();
}
希望有帮助:)

结束

相关推荐

How can I find plugins' slug?

我想知道如何才能找到插件的slug(slug=WordPress用来更新插件和确定哪些插件当前处于活动状态的内部名称)?它通常是插件的文件夹名,但如果插件没有文件夹,则是其文件名(如hello.php)。是否有其他例外情况?大小写字符重要吗</插件的slug是否可以与其文件夹名不同?如果有一个叫做hello的插件呢。php和另一个/您好。php/您好。php