WordPress/Form Proc Plugin
WordPress Form Processing Plugin creation
Soul-Learner
2015. 12. 27. 18:18
워드프레스에서 폼을 처리하고 결과화면에 데이터를 전달하는 플러그인 작성 예
개요
워드프레스 기반에서 개발자가 작성한 폼에서 요청이 서버로 전달되면 서버측에서는 개발자가 작성한 스크립트가 실행되고 이어서 특정 결과화면으로 이동하는 전 과정이 어떻게 제어되는지 코드상에서 확인하려는 것이다
워드프레스 템플릿 페이지 상의 폼 -> 서버측 스크립트(PHP) 실행, 화면에 출력될 데이터 전달 -> 워드프레스 템플릿 페이지에 출력
여기서는 플러그인 안에 폼을 포함(Back-End Form)하고 Shortcode를 사용하여 첫번째 템플릿 페이지에 폼이 보여지도록 했지만 꼭 그럴 필요 없이 플러그인 밖에 폼이 있는 Front-End Form 형식을 따라도 코드는 거의 변함이 없다. 중요한 점은 워드프레스의 wp-admin/admin-post.php 에 요청을 전달하면 요청에 포함된 'action' 파라미터의 값을 참조하여 개발자가 정의한 플러그인의 액션함수가 호출된다는 점을 이용하는 것이다
wp-content/plugins/my-form-proc-plugin.php
<?php /* Plugin Name: MVC Demo Plugin Plugin URI: http://micropilot.tistory.com Description: 템플릿 페이지에 추가하면 데이터가 화면에 출력됨. [show_session_data]으로 포함가능 Version: 1.0 Author: Kim Chang Woon Author URI: http://micropilot.tistory.com */ add_shortcode('show_demo_form', 'kcw_demo_form'); add_action('admin_post_kcw_product_info','kcw_product_info'); add_action('admin_post_nopriv_kcw_product_info','kcw_product_info'); add_shortcode('show_session_data', 'print_session_data'); function log_d($tag, $msg){ $fp = fopen('c:/test/my-debug.log', 'a'); fwrite($fp, "$tag:$msg \r\n" ); fflush($fp); fclose($fp); } //요청폼 출력 함수() [show_demo_form] 페이지에 Shortcode를 추가하면 됨 function kcw_demo_form($atts) { ?> <h3>MVC Test</h3> <form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post"> <input type="hidden" name="action" value="kcw_product_info"> <button type="submit">전 송</button> </form> <?php } // admin_post_kcw_product_info 액션후크에 등록된 함수 // 위의 폼에서 요청이 전달되면 호출됨 function kcw_product_info() { $p = array('pname'=>'컴퓨터', 'price'=>1200000); $_SESSION['product'] = $p; wp_redirect('http://127.0.0.1/wordpress/view-demo/'); exit; } // 화면에 정보를 출력하는 함수 [show_session_data] Shortcode를 View에 추가하면 됨 function print_session_data($atts) { $p = $_SESSION['product']; echo "상품명 : ".$p['pname']; echo "가 격 : ".$p['price']; } ?>