Trình cắm mẫu thực hành tốt nhất


16

Tôi đã thực hiện rất nhiều nghiên cứu và không tìm thấy hoàn toàn những gì tôi đang tìm kiếm, vì vậy tôi hy vọng rằng tôi có thể được chỉ dẫn đúng hướng.

Tôi đang phát triển một plugin Sự kiện sẽ đặt vé từ frontend. Điều này không khác gì so với bất kỳ việc gửi Biểu mẫu nào khác, nhưng điều tôi đang bối rối là làm thế nào để xử lý việc đó từ một plugin được viết qua OOP với một lớp.

Hầu hết các bài viết mà tôi tìm thấy đều nói rằng việc xử lý $ _POST trong trang mẫu. Lý tưởng nhất là tôi muốn xử lý việc này bởi một chức năng trong plugin.

Một điều khác mà tôi không chắc chắn là khi bạn gửi biểu mẫu trên frontend, làm thế nào điều đó thực sự được chuyển đến chức năng trên phụ trợ. Tôi hy vọng sẽ hoàn toàn trừu tượng việc xử lý biểu mẫu từ bất kỳ chi tiết mẫu nào.

// events.php
if ( ! class_exists( 'Events' ) ) {

    Class Events {
        function __construct() {
            add_action( 'plugins_loaded', array( &$this, 'includes' ), 1 );
        }

        function includes() {
            require_once( EVENTS_INCLUDES . 'functions.php' );
        }
    }
}

if ( class_exists( 'Events' ) ) {
    $events_load = New Events();
}


// functions.php
function process_form() {
    ...do form processing here...

    ...insert booking...
}

Tôi không chắc chắn những gì để nối vào đó sẽ bắt được điều đó, hoặc nơi để gửi hành động biểu mẫu quá. Cảm ơn vì sự giúp đỡ!

-Adam


Bạn có một ví dụ đầy đủ hơn về logic bên trong process_form (). Tôi muốn biết hành động nào bạn gọi để đảm bảo việc gửi biểu mẫu của bạn được định tuyến chính xác.
emeraldjava

Câu trả lời:


8

Gửi hành động biểu mẫu đến trang chủ của bạn hoặc tới một URL trang cụ thể. Bạn không thể xử lý $ _POST trong mẫu vì bạn cần chuyển hướng sau khi xử lý nó và chuyển hướng cần phải được kích hoạt trước bất kỳ đầu ra HTML nào.

// you should choose the appropriate tag here
// template_redirect is fired just before any html output
// see - http://codex.wordpress.org/Plugin_API/Action_Reference
add_action('template_redirect', 'check_for_event_submissions');

function check_for_event_submissions(){
  if(isset($_POST['event'])) // && (get_query_var('pagename') === 'events) 
    {
       // process your data here, you'll use wp_insert_post() I assume

       wp_redirect($_POST['redirect_url']); // add a hidden input with get_permalink()
       die();
    } 

}

Bạn cũng có thể kiểm tra một nonce để đảm bảo dữ liệu được gửi từ đúng nơi ...


Tôi đã đến rất gần với giải pháp đó nhưng đang sử dụng init thay vì template_redirect. Tôi đã không nghĩ đến việc sử dụng chuyển hướng hoàn toàn theo cách đó nhưng nó đơn giản hơn nhiều so với việc cố gắng tìm hiểu chuyện gì đã xảy ra. Tôi đã kiểm tra nonce, chỉ cần có tất cả xác thực mẫu biểu mẫu và xác thực phía máy chủ. Cảm ơn sự giúp đỡ, tôi đã đấu tranh với điều này nhưng bây giờ nó có ý nghĩa.
alistek
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.