javascript - WordPress 自定义插件开发中的 AJAX 请求发布/返回
问题描述
我正在开发一个自定义 WordPress 插件,我需要 AJAX 在不重新加载页面的情况下点击和篡改数据。为此,我阅读了许多教程,最后以下面的基本插件代码结束。为了详细解释,这里是完整的代码......
插件文件:
<?php
/*
Plugin Name: WP Testing Plugin
Plugin URI: http://www.wordpress.org/WP-Testing-Plugin
Description: A Detailed Description About This Plugin.
Author: Muhammad Hassan
Version: 0.1
Author URI: http://www.wordpress.org
*/
/*____________WP Testing Plugin Admin/Script_____________*/
function wp_testingPlugin_admin() {
echo "
<button id='ClickHere'>Click Here To Hit The Ajax</button>
<div id='showReturnDataHereOnly'>_________</div>
<script type='text/javascript'>
jQuery('#ClickHere').click(function(){
jQuery.ajax({
type: 'post',
data: {
'my_plugin_ajax_submit': 'now',
'nonce' : '".wp_create_nonce( 'my_plugin_ajax_submit' )."'
},
success: function(response) {
jQuery('#ClickHere').text('Ajax Hitted Successfully');
jQuery('#showReturnDataHereOnly').html(response);
},
error: function(response) {
jQuery('#ClickHere').text('Error! ');
jQuery('#showReturnDataHereOnly').html('<div>Error</div>');
},
});
});
</script>
";
// Get The Ajax Hit And After Validating, Forward It To Another Function
if (isset($_POST['my_plugin_ajax_submit']))
{
if ( wp_verify_nonce( $_POST['nonce'], 'my_plugin_ajax_submit' ) )
{
my_plugin_ajax_submit();
}
}
}
// Desired Function To Be Run After Ajax Hit
function my_plugin_ajax_submit() {
echo "<b><u><i>Function Hitted.</i></u></b><br/>";
echo "<b><u><i>Working Fine.</i></u></b><br/>";
echo "<b><u><i>Data Returned.</i></u></b><br/>";
// Below Commented Code Is Working Fine After Clicking Upper Button And Getting An Email.
//wp_mail( 'user@domain.com', 'my_plugin_ajax_submit() fired', time());
//return true;
}
/*__________________________________________________________________*/
/*____________WP Testing Plugin Option_____________*/
//Adding "WP Testing Plugin" Menu To WordPress -> Tools
function wp_testingPlugin() {
// add_management_page( $page_title, $menu_title, $capability, $menu_slug, $function); Menu Under Tools
add_management_page("WP Testing Plugin By Hassan", "WP Testing Plugin", 'activate_plugins', "WP-Testing-Plugin", "wp_testingPlugin_admin");
}
add_action('admin_menu', 'wp_testingPlugin');
/*__________________________________________________________________*/
?>
这段代码部分工作正常,所以我想知道其余的错误。当我点击按钮时它工作正常,它会更改按钮文本,但会用整个相同的插件网页填充所需的 div,包括我的函数数据。而我只想用所需的函数数据填充所需的 DIV。这里有什么问题?只需要基本步骤即可在此模式下工作。
注意: 实际上,我想在插件页面中构建一个 HTML 表单,用户将在其中填写表单,然后表单数据将被发送到所需的函数数据,而无需重新加载页面,并将返回该函数输出。
解决方案
我尽了最大的努力并得到了工作,但我知道这不是获取数据的最佳方式,因为它正在获取整页然后我们只过滤所需的数据。无论如何,这是更新的代码...
插件文件:
<?php
/*
Plugin Name: WP Testing Plugin
Plugin URI: http://www.wordpress.org/WP-Testing-Plugin
Description: A Detailed Description About This Plugin.
Author: Muhammad Hassan
Version: 0.1
Author URI: http://www.wordpress.org
*/
/*____________WP Testing Plugin Admin/Script_____________*/
function wp_testingPlugin_admin() {
echo "
<button id='ClickHere'>Click Here To Hit The Ajax</button>
<div id='showReturnDataHereOnly'>_________</div>
<script type='text/javascript'>
jQuery('#ClickHere').click(function(){
jQuery.ajax({
type: 'post',
data: {
'my_plugin_ajax_submit': 'now',
'nonce' : '".wp_create_nonce( 'my_plugin_ajax_submit' )."'
},
success: function(response) {
jQuery('#ClickHere').text('Ajax Hitted Successfully');
// Get The Selected DIV Response Only From This Whole Page
jQuery('#showReturnDataHereOnly').html(jQuery('#my_plugin_ajax_submit_data',response).html());
},
error: function(response) {
jQuery('#ClickHere').text('Error! ');
jQuery('#showReturnDataHereOnly').html('<div>Error</div>');
},
});
});
</script>
";
// Get The Ajax Hit And After Validating, Forward It To Another Function
if (isset($_POST['my_plugin_ajax_submit']))
{
if ( wp_verify_nonce( $_POST['nonce'], 'my_plugin_ajax_submit' ) )
{
my_plugin_ajax_submit();
}
}
}
// Desired Function To Be Run After Ajax Hit
function my_plugin_ajax_submit() {
echo "<div id='my_plugin_ajax_submit_data'>";
echo "<b><u><i>Function Hitted.</i></u></b><br/>";
echo "<b><u><i>Working Fine.</i></u></b><br/>";
echo "<b><u><i>Data Returned.</i></u></b><br/>";
echo '</div>';
// Below Commented Code Is Working Fine After Clicking Upper Button And Getting An Email.
//wp_mail( 'user@domain.com', 'my_plugin_ajax_submit() fired', time());
//return true;
}
/*__________________________________________________________________*/
/*____________WP Testing Plugin Option_____________*/
//Adding "WP Testing Plugin" Menu To WordPress -> Tools
function wp_testingPlugin() {
// add_management_page( $page_title, $menu_title, $capability, $menu_slug, $function); Menu Under Tools
add_management_page("WP Testing Plugin By Hassan", "WP Testing Plugin", 'activate_plugins', "WP-Testing-Plugin", "wp_testingPlugin_admin");
}
add_action('admin_menu', 'wp_testingPlugin');
/*__________________________________________________________________*/
?>
我仍在寻找答案,因此如果有人可以更好地帮助我,那么这将选择该答案。我有一个建议,我们可以把我们需要的函数放在另一个文件中,这样我们就可以很容易地在被命中后获取该文件的全部内容?另外,如果你能帮我把 JavaScript 放到另一个文件中,那就更好了。
推荐阅读
- arduino - 在 ESP8266 中使用电平转换器的 UART-TTL 问题
- r - R通过新元素扩展每个列表级别
- snowflake-cloud-data-platform - 如何将时间戳转换为雪花中的日期
- excel - 将数字添加到 Lrow 时,运行时 1004 对象工作表范围失败
- visual-studio - 如何在 MDX 或其等效项中使用“WHERE”子句?
- python - 在 Python 中使用 Hash 删除重复文件。适用于英文文档但不适用于中文文档
- laravel - Laravel - 添加来自 Eloquent 模型 belongsToMany 关系的额外约束
- compiler-construction - 外循环的寄存器分配
- kubernetes - Openshift 中的 Infinispan(Red Hat 数据网格),带有 WebSphere Liberty
- windows - Electron Windows Production Bundle 命令行参数