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'];
}
?>