본문 바로가기

WordPress/Plugin (Shortcodes)

WordPress Shortcode example

워드프레스에서 간단한 형태의 플러그인(Shortcode) 작성 및 실행 테스트


원문참조: https://codex.wordpress.org/Writing_a_Plugin


테스트 환경

Windows 8

WordPress 4.4



WordPress 플러그인의 다양한 형태

Action

워드프레스 개발자 패널이나 템플릿 실행시 특정 시점(Action Hooks)에 개발자의 코드를 워드프레스가 호출하는 형태. 액션함수는 파라미터를 선언할 필요가 없고 리턴값도 없다. 특정 시점 (Action Hooks)에 개발자의 코드를 실행할 기회를 준다는 점에 의미가 있다


Filter

워드프레스 템플릿 실행시 웹페이지의 제목이나 내용이 출력되기 직전의 시점(Filter Hooks)에 해당 데이터를 조작하기 위해 개발자의 코드가 호출되는 형태. 호출되는 함수를 필터함수라고 하고 필터함수는 파라미터로 데이터를 받아야 하고 리턴된 값은 화면에 출력된다. 데이터가 화면이나 DB에 출력되기 전에 개발자에게 해당 데이터를 조작할 기회를 준다는 점에 의미가 있다


Shortcode

일종의 필터와 같이 여겨지며 개발자가 웹페이지의 특정 물리적 위치에 Shortcord를 삽입하면 해당 위치에서 함수가 호출되는 형태


Template Tag

테마의 functions.php 파일에 개발자 정의 함수를 추가하고 다른 php 코드에서 호출하는 형태


Widget

테마의 사이드 바에 추가될 수 있는 위젯을 생성하는 php 클래스



플러그인 파일 생성 경로

워드프레스가 설치된 경로 아래에 wp-content/plugins/ 안에 임의의 php 파일을 생성하거나 임의의 폴더를 생성하고 그 안에 php 파일을 생성하면 된다.

이 경우 워드프레스는 자동으로 플러그인 파일을 찾을 수 있으며 별도의 설정은 필요 없다



가장 간단한 Hello World 플러그인 ( Shortcode )의 예

다음과 같은 코드를 작성하여 wp-content/plugin/my_most_simple_plugin_0.1.php 경로에 저장한 후 관리자의 [플러그인] 페이지를 보면 플러그인이 등록된 것을 확인할 수 있다

<?php
/*
Plugin Name: My Most Simple Plugin
Plugin URI: http://micropilot.tistory.com
Description: A real simple plugin
Version: 1.0
Author: Kim Chang Woon
Author URI: http://micropilot.tistory.com
*/

// wordpress.org 사이트에 올려졌을 때 이 파일에 직접 접근하는 것을 방지한다
defined( 'ABSPATH' ) or die( 'Plugin file cannot be accessed directly.' );

/* 위의 헤더 내용은 워드프레스 관리자화면 [플러그인] 화면에 나타난다
 plugin Name : 필수 (이 항목만 필수임)
 Plugin URI: 플러그인 상세정보 페이지(비필수), 워드프레스 플러그인 페이지에 [플러그인 사이트 방문] 링크 구성
 Version : 버전번호 (비필수)
 License : 'GPLv2 or later', 혹은 'Free' (비필수)
 wordpress.org 사이트에 올려졌을 때 이 파일에 직접 접근하는 것을 방지한다
*/

function display_msg($atts) {
	echo 'Hello World <p>';
}

//[my_most_simple_plugin] 라는 Shortcode 를 사용하는 페이지에서는 'Hello World' 문자열이 출력된다
add_shortcode('my_most_simple_plugin', 'display_msg');
?>


위의 코드에서 add_shortcode()함수의 두번째 아규먼트는 액션후크에 등록할 함수의 이름이다

add_shortcode(), add_action(), add_filter()함수는 워드프레스가 시작될 때 자동으로 호출되는 함수이며 이들 함수가 실행되면 특정 후크에 함수가 등록되어 실행될 준비가 완료된다


이용자가 Shortcode를 사용할 때 속성과 바디(컨텐츠)를 설정하면 Shortcode함수의 아규먼트로 전달되어 함수 안에서 사용할 수 있다


아래의 코드는 템플릿 페이지에서 Shortcode를 사용할 때 속성을 사용하고 그 속성의 값을 배열로 전달받는 플러그인 함수의 형태이다

아래에서는 속성의 값을 저장한 배열을 $att 로 표현했지만 임의의 변수를 선언하면 된다 

<?php

// 중략


// Shortcode를 사용한 페이지로부터 Shortcode 속성이 $att 에 전달된다

function display_msg($att) {

  //var_dump($att); // $att 배열의 모든 원소를 확인할 수 있다

  echo $att['attr1'].' '.$att['attr2'];

}

//[my_most_simple_plugin attr1='Hello' attr2='World'] 라는 Shortcode 를 사용하는 페이지에서는 'Hello World' 문자열이 출력된다

add_shortcode('my_most_simple_plugin', 'display_msg');


?>'



다음은 Shortcode를 사용할 때 속성 뿐만 아니라 컨텐츠도 전달하고 받는 예이다

<?

//중략


// 페이지에 사용한 Shortcode의 속성과 컨텐츠를 아규먼트로 전달 받는 플러그인 함수

function display_msg($att, $contents) {

  echo $att['attr1'].' '.$att['attr2'].', contents:'.$contents;

}


//[my_most_simple_plugin attr1='Hello' attr2='World'] This is body contents[/my_most_simple_plugin]

add_shortcode('my_most_simple_plugin', 'display_msg');

?>