워드프레스 플러그인 안에서 폼을 보여주고 폼 데이터를 처리하는 예
개요
워드프레스에서 개발자가 플러그인을 작성할 때 입력폼과 폼 데이터 처리를 위한 로직을 플러그인에 포함하도록 하는 절차를 알아보고자 한다
플러그인을 작성하여 Shortcode를 웹페이지에 포함하면 화면에 폼이 출력되고 그 폼을 전송하면 동일 플러그인에서 폼 데이터를 처리하는 예제를 작성하려고 한다. 폼을 전송할 때 히든필드에 액션후크의 이름을 전달하면 서버측에서 do_action('액션후크이름') 를 호출하여 플러그인 내의 액션함수를 실행할 수 있다. 그러므로 한개의 플러그인 안에 폼을 보여주고 또 폼 데이터를 처리하는 기능까지 모두 내장할 수 있다
테스트 환경
Autoset 9
WordPress 4.4
Shortcode 함수는 폼을 출력하고 Action 함수는 폼을 처리하는 기능을 수행하도록 플러그인을 작성하다
<?php /* Plugin Name: My Form Processing Plugin Plugin URI: http://micropilot.tistory.com Description: 폼을 출력/전송/처리/응답 플러그인 Shortcode : [my_most_simple_form] Version: 1.0 Author: Kim Chang Woon Author URI: http://micropilot.tistory.com */ /** 폼을 작성할 때 폼의 action 속성에 'admin-post.php'를 지정하고 hidden 필드에 name='action' value='aaaa-bbbb' 을 설정하여 액션후크의 이름을 전달하면 admin-post.php 에서는 이들의 값들을 결합하여 do_action('admin_post_aaaa_bbbb') 을 호출하므로 요청에 따라서 동적으로 액션함수를 호출할 수 있다 */ function show_simple_form($atts) { echo "<form action='".get_admin_url()."admin-post.php' method='post'>"; echo "<input type='hidden' name='action' value='submit-form' />"; echo "<input type='text' name='msg' value='사랑합니다' />"; echo "<button type='submit'>전 송</button>"; echo "</form>"; } //[my_most_simple_plugin] 라는 Shortcode 를 사용하는 페이지에 폼이 출력된다 add_shortcode('my_most_simple_form', 'show_simple_form'); add_action('admin_post_submit-form', 'my_handle_form_action'); // If the user is logged in add_action('admin_post_nopriv_submit-form', 'my_handle_form_action'); // If the user in not logged in function my_handle_form_action(){ echo $_POST['msg']; //header('Location: http://localhost/wordpress/result'); } ?>