Làm thế nào để xử lý đệ trình mẫu?


13

Tôi mới sử dụng wordpress và do đó phải đối mặt với một số vấn đề.

Kịch bản ca sử dụng như sau:

  1. Một người dùng được hiển thị một mẫu đơn đăng ký để bắt đầu một câu lạc bộ trong trường của mình.
  2. Người dùng điền vào biểu mẫu và nhấn nút 'Gửi'.
  3. Các hình thức cần phải được xác nhận.
  4. Nếu xác thực thành công, thì dữ liệu sẽ được lưu trong bảng tùy chỉnh club_detailstheo db và người dùng sẽ hiển thị một số thông báo (ví dụ: Cảm ơn bạn đã gửi. Ứng dụng của bạn được gửi tới quản trị viên để phê duyệt.) Các thông báo lỗi thích hợp khác được hiển thị cho người dùng.
  5. Quản trị viên đi đến bảng quản trị Wordpress để phê duyệt các yêu cầu đang chờ xử lý cho câu lạc bộ. (Dữ liệu được tìm nạp từ db và hiển thị cho quản trị viên).

Tôi đã làm như sau:

  • cho 1) Tôi đã tạo một biểu mẫu / trang ứng dụng bằng trình soạn thảo Wordpress HTML.
  • cho 3) Tôi có tệp javascript ( validation.js) có mã xác thực.
  • cho 4) Tôi có một tệp php ( club-functions.php) có chức năng storeInDB()lưu trữ các chi tiết ứng dụng trong bảng tùy chỉnh trong db.
  • cho 5) Tôi đã tạo thư mục plugin của riêng mình và thêm tệp php ( club.php) hiển thị chi tiết ứng dụng cho quản trị viên trên bảng quản trị Wordpress.

Tôi bị kẹt ở vị trí sau: Cách xử lý việc gửi biểu mẫu. Tôi nên đặt mã gọi hàm xác thực của javascript ở đâu và sau đó gọi storeInDB()hàm.

Vui lòng cung cấp cho tôi một số gợi ý về cách tôi đạt được điều này và phương pháp này có tốt không? Cảm ơn rất nhiều trước.

Câu trả lời:


13

Bạn nên sử dụng wp_ajaxhoặc wp_ajax_noprivchức năng.

Trước hết, bạn nên đặt url ajax của quản trị viên làm giá trị thuộc tính hành động trong biểu mẫu gửi.

<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >

Bằng cách đó, biểu mẫu sẽ được gửi tới admin-ajax.php theo mặc định (không có JavaScript). Bạn có thể sử dụng JavaScript để làm cho nó hoạt động bằng AJAX.

Tiếp theo là chức năng sẽ sử dụng dữ liệu đã gửi. Trong biểu mẫu, đặt một wp_nonce_fieldvà một đầu vào ẩn với hành động tên. Giá trị hành động của tôi là add_transfer.

<?php wp_nonce_field('add_transfer','security-code-here'); ?>
<input name="action" value="add_transfer" type="hidden">

Bạn có thể đặt hàm sẽ xử lý biểu mẫu này trong tệp.php hoặc trong tệp plugin của bạn. Bạn có thể sử dụng wp_ajax_+ tên hành động nếu đây chỉ là một hình thức cho người dùng đã đăng nhập. Đối với người dùng chưa đăng nhập, sử dụng wp_ajax_nopriv+ tên hành động thay thế.

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);
}

Cảm ơn ifdion đã trả lời. Tôi đang tạo biểu mẫu trong 'Trình soạn thảo Wordpress HTML'. Vì vậy, có tốt không khi đưa mã php vào biểu mẫu vì tôi sẽ phải cài đặt plugin 'Exec-PHP' mà tôi tin là quá mức cần thiết? Hãy chia sẻ suy nghĩ của bạn.
Pooja

Chỉ cần thay thế giá trị hành động bằng your-site-url.com/wp-admin/admin-ajax.php .
ifdion

Nó có hoạt động không?
ifdion

1
Có cách nào tốt để đạt được điều tương tự nhưng không có admin-ajax.php không?
Tahir Yasin

1
@TheWPNovice Tôi đoán nó vẫn còn trong /wp-admin/thư mục. Lưu ý rằng bạn không cần thay đổi hoặc thêm bất cứ điều gì trong tập tin đó.
ifdion

2

trước tiên, hãy để tôi nói với bạn rằng xác thực javascript hoạt động ở phía máy khách. Vì vậy, nếu người dùng, vô hiệu hóa js, bạn sẽ gặp vấn đề.

vì vậy, bạn cũng nên xác nhận các giá trị đầu vào, phía máy chủ.

với ý nghĩ đó:

Mã js có thể được gọi trực tiếp từ trang có biểu mẫu. thuộc tính onsubmit là cách thông thường để gọi nó.

thí dụ

<form onSubmit="validateForms()" method="post" action="domain.com/club-contacts">
    <label for="app_email">Application</label>
    <input type="text" name="app_email" id="app_email" value="" />
    <input type="hidden" name="app_application" value="1" />
    <input type="submit" name="app_form_send" value="Send" />
</form>

trang.php

Đây cũng có thể là trang mẫu tùy chỉnh của bạn hoặc single.php. trong trường hợp này, 99 là ID của trang cụ thể bạn muốn chỉ cho người dùng nếu nó được phê duyệt hoặc có lỗi.

if ( get_the_ID() == '99' ) {
  // lets validate the input
  if( !empty($_POST['app_application']) && $_POST['app_application'] == "1"  ) {
   if(!empty($_POST['app_email'])) {
    // check the codex for [Data_Validation][1]
    }
  }
}

Cảm ơn peteroak đã trả lời. Tôi có thể gọi mã PHP ở đâu để xử lý thêm dữ liệu biểu mẫu?
Pooja

thuộc tính hành động sẽ trỏ đến một tập tin. trong tập tin đó bạn có thể lọc và xác nhận mẫu của bạn. tôi sẽ cập nhật phản hồi của tôi để bao gồm điều đó.
pcarvalho
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.