问题描述

我是新来的 wordpress,因此面临一些问题。

用例情况如下:

  1. 用户显示申请表以在他的学校开始一个俱乐部。

  2. 用户填写表单并点击’Submit’ 按钮。

  3. 表格需要验证。

  4. 如果验证成功,则数据存储在数据库中的自定义表 club_details 中,用户将显示一些消息 (例如:感谢提交,您的应用程序将发送给管理员批准) 否则向用户显示相应的错误消息。

  5. 管理员到 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_ajaxwp_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。