我正在开发WP插件,当用户输入ID
时,它将针对该ID
发布帖子。它在管理方面工作正常。我按照此示例通过 AJAX 调用获取数据,但现在我正在尝试在任何人都可以输入 ID
并获得结果的前端执行此操作。我已经删除了用于在管理员端创建页面的功能。现在我有 3 个函数命名为:
- hello_word()
- ajax_script()
- ajax_handler()
我尝试使用以下钩子进行注册,但它不起作用
- add_action( 'admin_footer', 'ajax_script' );
- add_action( 'wp_ajax_my_action', 'ajax_script' );
- add_action( 'wp_ajax_nopriv_my_action', 'ajax_script' );
hello_word()
函数包含文本字段和按钮的代码。我从模板文件中调用hello_word()
函数并且它显示正确,但是当我单击按钮时 AJAX 不起作用。我发现的问题是ajax_script()
未加载,并且在源代码的调试模式下,单击按钮时没有任何内容。
那么当我从模板文件调用 hello_word()
时,如何正确加载 ajax 函数呢?
你把事情搞混了。
add_action( 'wp_ajax_my_action', 'your_handler' );
和 add_action( 'wp_ajax_nopriv_my_action', 'your_handler' );
用于添加函数,该函数将分别处理对登录和来宾用户的 ajax 调用的响应。
add_action( 'wp_footer', 'ajax_script' );
- 页脚的前端操作wp_footer
,仅当您的主题实际调用它时,此操作才有效。但更好的做法是为您的插件提供一个单独的 .js 文件,其中包含所有 js,而不是内联输出它。
若要将脚本排队,可以使用以下代码
function enqueue_assets()
{
wp_enqueue_script('your_plugin_js', plugins_url('/my.js', __FILE__), array('jquery'), false, true); //true will put it into the footer
wp_localize_script('your_plugin_js', 'your_plugin_ajax_object', array('ajax_url' => admin_url('admin-ajax.php', ((is_ssl()) ? 'https' : 'http')))); // your url for ajax call wil be available as your_plugin_ajax_object.ajax_url
//wp_enqueue_style('your_plugin_css', plugins_url('/my.css', __FILE__)); // you can output css here too if you want
}
add_action('wp_enqueue_scripts', 'enqueue_assets');
您可以在任何您喜欢的地方调用 hello_world
函数。