問題描述

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