构建我的第一个插件,我在脚本之间进行通信时遇到困难。如何使用JS AJAX调用处理我的函数的插件PHP脚本。
我发现在WordPress中加载插件脚本(显然)导致渲染/权限问题。
这是一个简化版本 - 插件通过短代码实例化:
[short-code]
目标:通过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 :(得分: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
上找到更多相关信息答案 1 :(得分:0)
最终,我能够在@ ToshoTrajanov的帮助下通过指出如何将ajaxurl变量放入页面来解决这个问题。这是我的绊脚石。不过,对我而言,我在PHP中将标记放开并将以下内容添加到我的php init函数中:
<?php
print "<script class='gcCleanup'>";
print 'var ajaxurl = "' . admin_url('admin-ajax.php') . '";';
print "</script>";
?>