問題描述
我是新來的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。