플러그인 양식 제출 모범 사례


16

나는 많은 연구를 해왔고 내가 찾고있는 것을 찾지 못해서 올바른 방향을 가리킬 수 있기를 바라고 있습니다.

프론트 엔드에서 티켓을 예약 할 이벤트 플러그인을 개발 중입니다. 이것은 다른 양식 제출과 다르지 않지만 혼란스럽게하는 것은 클래스와 함께 OOP를 통해 작성된 플러그인에서 처리하는 방법입니다.

내가 찾은 대부분의 기사는 템플릿 페이지 내에 $ _POST 처리를한다고 말합니다. 이상적으로는 플러그인 내의 함수로 처리하고 싶습니다.

확실하지 않은 또 다른 사항은 프런트 엔드에서 양식을 제출할 때 실제로 백엔드의 함수에 전달되는 방식입니다. 템플릿 세부 정보에서 양식 처리를 완전히 추상화하기를 희망합니다.

// 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...
}

무엇에 연결 해야하는지 또는 양식 작업을 보낼 위치를 잘 모르겠습니다. 모든 도움을 주셔서 감사합니다!

-아담


process_form () 내부의 논리에 대한 더 완벽한 예가 있습니까? 양식 제출이 올바르게 전달되도록하기 위해 어떤 조치를 취해야하는지 알고 싶습니다.
emeraldjava

답변:


8

양식 조치를 홈페이지 또는 특정 페이지 URL로 보내십시오. 프로세스 후에 리디렉션해야하고 HTML 출력 전에 리디렉션을 시작해야하므로 템플릿 내에서 $ _POST 처리를 할 수 없습니다.

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

}

데이터가 올바른 장소에서 제출되었는지 확인하기 위해 nonce 를 확인할 수도 있습니다 ...


나는 그 해결책에 매우 가까이 왔지만 template_redirect 대신 init를 사용하고있었습니다. 나는 그렇게 리디렉션을 사용하는 것을 생각하지 않았지만 일어난 일을 알아내는 것보다 훨씬 간단합니다. 이미 nonce를 확인하고 있으며 모든 JS 양식 및 서버 측 양식 유효성 검사를 수행해야합니다. 도움을 주셔서 감사합니다.이 문제로 어려움을 겪었지만 지금은 의미가 있습니다.
alistek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.