我创建了一个插件,并将其安装在任何wordpress网站上。出于任何原因,我需要从其他站点(不是wordpress站点)调用这些插件上的函数。
我已经尝试使用cURL 和file_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;
}
}
}
........
}
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();
}
希望有帮助:)