2016-08-30 72 views
-1

构建我的第一个插件,我很难在脚本之间进行通信。如何使用JS AJAX调用处理函数的插件PHP脚本。WordPress Plugin =>如何使用JS AJAX触发插件PHP函数

我发现在WordPress中加载插件脚本不是(显然)导致渲染/权限问题。

这里的归结版本 - 该插件是通过短码实例:

[short-code]

  • 这揭开序幕WP插件,进行一些准备工作。
  • 加载DOM后,我使用HTML5来查找用户的地理位置。

目标:通过AJAX将HTML5地理位置数据传递给位于php文件中的php函数。例如:调用未定义功能register_activation_hook()

var sf_path = jQuery('#sf_path').val(); 
var url = '/wp-content/plugin/plugin_name/plugin_name.php?h=true&=lat='+position.coords.latitude+'&lng='+position.coords.longitude; 
var jqxhr = jQuery.get(url , function(data) { 
    console.log("geolocate", data); 
    //Response = PHP Error: Call to undefined function register_activation_hook() 
}); 

我想我可以重写代码来区分平台并运行不同的基于请求(基本上,unwordpressify某些功能),但它会更加便利太多的不必须这样做。 wp_remote_get非常方便。

我错过了什么?

+0

@Machavity - 我将其添加为你这么精明提的是,这是一个模糊的请求。 – vars

回答

1

WP ajax调用通过admin-ajax.php脚本进行处理。首先,你需要做的就是注册行动 -

add_action('wp_ajax_my_action', 'my_action_callback'); 
add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); 

接下来,你需要定义一下这个my_action_callback会做。

function my_action_callback() { 
    // Handle Geo Location Data 
    wp_die(); // this is required to terminate immediately and return a proper response 
} 

完成后,您可以发送AJAX调用

<script type="text/javascript" > 
jQuery(document).ready(function($) { 

    var data = { 
     'action': 'my_action', 
     'geo': 1234 
    }; 

    jQuery.post(ajaxurl, data, function(response) { 
     alert('Got this from the server: ' + response); 
    }); 
}); 
</script> 

如果ajaxurl是不确定的,你可以将其定义这样 -

var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>"; 

你可以找到更多关于在documentation

+0

非常感谢。使用你的代码,我能够获得成功的回调!我确实在文档上阅读过这些内容,但是在实现时遇到了困难。这帮助我完成了。成功! – vars

0

最终,我能够在@的帮助下解决这个问题。 ToshoTrajanov的帮助,指出如何将ajaxurl变量放入页面。这是我的绊脚石。对于我来说,我踢我的加价关在PHP,并添加以下到我的PHP初始化函数:

<?php 
print "<script class='gcCleanup'>"; 
print 'var ajaxurl = "' . admin_url('admin-ajax.php') . '";'; 
print "</script>"; 
?>