构建我的第一个插件,我很难在脚本之间进行通信。如何使用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是非常方便的。
我错过了什么?
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'); ?>";
您可以在文档
最终,在@ToshoTrajanov的帮助下,我能够解决这个问题,指出如何将ajaxurl变量放入页面。这是我的绊脚石。不过,对于我来说,我在PHP中取消了标记,并在PHP init函数中添加了以下内容:
<?php
print "<script class='gcCleanup'>";
print 'var ajaxurl = "' . admin_url('admin-ajax.php') . '";';
print "</script>";
?>