问题描述
我是新来的 wordpress,因此面临一些问题。
用例情况如下:
-
用户显示申请表以在他的学校开始一个俱乐部。
-
用户填写表单并点击’Submit’ 按钮。
-
表格需要验证。
-
如果验证成功,则数据存储在数据库中的自定义表
club_details
中,用户将显示一些消息 (例如:感谢提交,您的应用程序将发送给管理员批准) 否则向用户显示相应的错误消息。 -
管理员到 Wordpress 管理面板批准俱乐部的待处理请求。 (数据从 db 获取并显示给管理员) 。
我做了以下工作:
-
因为 1) 我已经使用 Wordpress HTML 编辑器创建了一个应用程序表单/页面。
-
为 3) 我有一个 javascript 文件 (
validation.js
) 具有验证码。 -
为 4) 我有一个 php 文件 (
club-functions.php
) 具有函数storeInDB()
存储在 db 中的自定义表中的应用程序详细信息。 -
为 5) 我已经创建了我自己的插件文件夹,并添加了一个 php 文件 (
club.php
),显示应用程序详细信息到 Wordpress 管理面板上的管理员。
我被困在以下位置:如何处理表单提交。我应该在哪里放置调用 javascript 的 validate 函数的代码,然后调用 storeInDB()
函数。
请给我一些关于如何实现这一点的建议,这个方法好吗?非常感谢。
最佳解决方案
您应该使用 wp_ajax
或 wp_ajax_nopriv
功能。
首先你应该把 admin ajax 的 url 作为 action 属性值。
<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >
这样,表单将默认提交给 admin-ajax.php(不带 JavaScript) 。您可以使用 JavaScript 使其使用 AJAX 工作。
接下来是将使用提交的数据的功能。在表单中,放置一个 wp_nonce_field
和带有名称操作的隐藏输入。我的动作值是 add_transfer
。
<?php wp_nonce_field('add_transfer','security-code-here'); ?>
<input name="action" value="add_transfer" type="hidden">
你可以把函数处理这个表单在 functions.php 或你的插件文件中。您可以使用 wp_ajax_
+操作名称,如果这仅是登录用户的表单。对于非登录用户,请改用 wp_ajax_nopriv
+操作名称。
add_action('wp_ajax_add_transfer', 'process_add_transfer');
function process_add_transfer() {
if ( empty($_POST) || !wp_verify_nonce($_POST['security-code-here'],'add_transfer') ) {
echo 'You targeted the right function, but sorry, your nonce did not verify.';
die();
} else {
// do your function here
wp_redirect($redirect_url_for_non_ajax_request);
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。