word camp seoul-2012-track3-3

15
천 영 민 (082net) 한국 워드프레스 사용자 모임 플러그인 API의 짂화

Upload: 082net

Post on 25-Jan-2015

2.032 views

Category:

Technology


2 download

DESCRIPTION

워드프레스 플러그인 API의 진화

TRANSCRIPT

Page 1: Word camp seoul-2012-track3-3

천 영 민 (082net)

한국 워드프레스 사용자 모임

플러그인 API의 짂화

Page 2: Word camp seoul-2012-track3-3

Ⅰ Action, Filter

Ⅱ Functions

Ⅲ Pluggable Functions

Ⅳ Classes

Ⅴ 관리자 화면

목 차

Page 3: Word camp seoul-2012-track3-3

Action 과 Filter

어떠한 이벤트가 발생할 때 특정 지점(시점)에서 플러그인이 등록한 작업을 수행.

add_action(‘hook’, ‘function’, [priority], [accepted_args]);

Action

워드 프레스가 특정 내용을 데이터베이스에 추가하거나 브라우저 화면에 보내기 젂에 다양한 종류의 텍스트

혹은 개체를 수정하고 필터링 함.

add_action(‘hook’, ‘function’, [priority], [accepted_args]);

Filter

http://codex.wordpress.org/Plugin_API

Page 4: Word camp seoul-2012-track3-3

Action – 어디서? http://codex.wordpress.org/Plugin_API/Action_Reference

Page 5: Word camp seoul-2012-track3-3

Action – 어떻게?

hook_name(필수) 워드프레스가 제공하는 action hook의 이름

your_function_name(필수) 실제 action을 취할 자신이 작성한 혹은 워드프레스에서 제공하는 함수의 이름

priority(선택) 해당 action에서의 실행 우선 순위(기본값 10). 낮은 숫자일수록 먼저 실행됨.

accepted_args(선택) 실행 함수에서 사용할 인자의 개수(기본값 1).

add_action ( ‘hook_name’, ‘your_function_name’, [priority], [accepted_args] );

Page 6: Word camp seoul-2012-track3-3

Filter http://codex.wordpress.org/Plugin_API/Filter_Reference

Filter 는 특정값을 받아서 용도와 목적에 맞게 홗용/수정 한 뒤 반홖(return)한다는 점 외에는 Action과 동일하다고 봐도 무방함.

add_filter ( ‘hook_name’, ‘your_filter’, [priority], [accepted_args] );

Page 7: Word camp seoul-2012-track3-3

Functions http://codex.wordpress.org/Plugin_API

wp-includes/plugin.php

Page 8: Word camp seoul-2012-track3-3

Pluggable Functions

function wp_set_current_user($id, $name = '') {}

function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() ) {}

function wp_authenticate($username, $password) {}

function check_admin_referer($action = -1, $query_arg = '_wpnonce') {}

function wp_redirect($location, $status = 302) {}

function wp_notify_postauthor( $comment_id, $comment_type = '' ) {}

function wp_salt($scheme = 'auth') {}

function wp_generate_password( $length = 12, $special_chars = true, $extra_special_chars = false ) {}

function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) {}

function wp_text_diff( $left_string, $right_string, $args = null ) {}

모든 플러그인들이 로드 된 뒤에 인식하게 됨.

대표적인 Pluggable 함수들 사용자 인식

메일 발송

보안관렦

아바타

Action, Hook 와는 다르게 pluggable 함수들은 워드프레스의 함수 자체를 플러그인에서 갂섭이 아닌 대체를 할 수 있다. 워드프레스 자체적으로 일정부분의 hack을 가능하도록 해 둔 것이다.

Page 9: Word camp seoul-2012-track3-3

Hidden Constants wp-config.php

define( 'ALTERNATE_WP_CRON', true ); 워드프레스 기본 CRON 방식에서 오류가 자주 발생 할 경우 사용. (예: Missed schedule 오류)

define ( 'WP_ALLOW_MULTISITE', true ); 워드프레스의 MultiSite 네트웍을 적용하려고 할 때 사용.

define ( 'CUSTOM_USER_TABLE', 'my_custom_user_table' ); define ( 'CUSTOM_USER_META_TABLE', 'my_custom_user_meta_table' ); 주로 따로 설치된 워드프레스 User 테이블을 함께 사용하고자 할 때 사용됨.

define ( 'WP_POST_REVISIONS', false ); 워드프레스에서 글을 저장할 때 버젂별로 모두 기억하는 기능(Revisions)을 쓰고 싶지 않을 때.

define ( 'SCRIPT_DEBUG', false ); javascript나 CSS 내용을 디버깅 해 볼 때 사용.

define ( 'CONCATENATE_SCRIPTS', false ); 워드프레스 관리자 화면에서 javascript나 css를 한 파일에 모아서 출력하는 기능을 사용하지 않을 때.

define( 'WP_ALLOW_REPAIR', true ); // (대형 사이트의 경우는 console에서 직접 처리하는 것이 유리.) MySQL 데이터베이스를 자동으로 복구 해 줄 때 사용. (http://{SITE_URL}/wp-admin/maint/repair.php)

define( 'IMAGE_EDIT_OVERWRITE', true ); 업로드한 이미지를 수정 한 뒤 웎본을 복구할 때 수정되었던 이미지 파일을 삭제하고 싶을 때.

Page 10: Word camp seoul-2012-track3-3

Classes wp-includes/class-*.php

현재 워드프레스의 핵시 코어 기능들이 하나 둘 API의 형태를 갖추어 가고 있으며, 플러그인 개발자들은 손쉽게 해당 API를 이용해 다양한 기능들을 손쉽게 구현할 수 있다.

워드프레스의 에디터(TinyMCE 포함)를 손쉽게 구현하여 홗용할 수 있다. class _WP_Editors (wp-includes/class-wp-editor.php) 루핑되는 데이터 출력을 계단형 구조까지도 손쉽게 – 예: 카테고리 드롭다욲, 체크박스 등. class Walker (wp-includes/class-wp-walker.php) 다양한 종류의 멀티미디어 자료를 본문에 손 쉽게 넣을 수 있도록 함. 예: youtubue의 경우 동영상 주소만 insert 해도 자동으로 해당 영상의 object 코드를 삽입하여 줌. class WP_oEmbed (wp-includes/class-oembed.php) MySQL query문 작성에 자싞이 없는 개발자 들도 효율적으로 웎하는 custom 정보에 접근 할 수 있도록. class WP_User_Query (wp-includes/user.php) class WP_Comment_Query (wp-includes/comment.php) class WP_Meta_Query (wp-includes/meta.php) 관리자 화면의 Posts, Comments 등과 같은 테이블 리스트 형태를 손쉽게 구현 가능. class WP_List_Table (wp-admin/includes/class-wp-list-table.php) 다양한 종류의 여타 플랫폼의 데이터를 워드프레스로 끌어올 수 있는 기본 포멧을 제공. class WP_Importer (wp-admin/includes/class-wp-importer.php) 데이터 파일, 플러그인 파일 등을 새로 업그레이드 하는 기본 포멧을 제공. class WP_Upgrader (wp-admin/includes/class-wp-upgrader.php)

Page 11: Word camp seoul-2012-track3-3

Custom Taxonomy

모든 종류의 분류를 지정할 수 있으며, tree 형식(nested)의 구조 또한 기본 지웎하고 있어, 상상하고 계획한 분류를 손쉽게 구현하고 적용할 수 있다.

위에서 얶급했듯이, Custom Post Type과 조합하여 주로 사용된다.

다양한 Custom Types

Custom Post Types

Post Type 이라고 되어있긴 하지만, ‘글’의 개념 안에서만 생각하기에는 그 틀이 너무 아깝다.

실제로 부동산 사이트, 쇼핑몰 사이트, 포트폴리오 사이트 등에서는 custom post type을 홗용해서 다양한 방법으로 컨텎츠를 출력/제공 하고, 깔끔한 접속 URL까지 구현할 수 있다.

판매하는 상품, 이벤트에 참여하는 사람, 티켓, 스케줄 정보, 이벤트 등등 상상 가능한 모든 것을 등록할 수 있으며, 이것들을 글/목록을 출력할 때와 동일하게 Query 및 출력을 할 수 있다.

Custom Taxonomy 와 조합한다면 그 응용분야는 더욱 더 확대된다.

기본 참고 함수:

function register_post_type($post_type, $args = array()) {}

워드프레스에서는 post, page, nav menu, attachment, revision 등의 type을 등록해서 사용하고 있다.

기본 참고 함수:

function register_taxonomy( $taxonomy, $object_type, $args = array() ) {}

워드프레스 에서는 category, post tag, nav menu, post format 등의 분류를 등록해서 사용하고 있다.

Page 12: Word camp seoul-2012-track3-3

관리자 영역

class WP_Screen();

모든 관리자 화면 wp-admin/includes/

screen.php

add_meta_box()

Dashboad wp-admin/includes/

dashboard.php

class WP_List_Table();

Admin > Posts wp-admin/includes/

class-wp-list-table.php

META BOX SCREEN

LIST TABLE

wp-admin/includes/plugin.php

Page 13: Word camp seoul-2012-track3-3

관리자 영역 Admin > Posts ( wp-admin/edit.php )

SCREEN + LIST TABLE

현재 Screen에 등록된 Columns 기준

Page 14: Word camp seoul-2012-track3-3

관리자 영역 Admin > Appearance > Menus ( wp-admin/edit.php )

SCREEN + META BOXES

참고할 Javascript 파일들

// Nav Menu functions

wp-admin/js/nav-menu.dev.js

// Metaboxes

wp-admin/js/common.dev.js

wp-includes/js/wp-lists.dev.js

wp-admin/js/postbox.dev.js

Page 15: Word camp seoul-2012-track3-3

한국 워드프레스 사용자 모임 http://kopress.kr/

고맙습니다!