본문 바로가기

wordpress/wordpress기초

워드프레스 - 테마 만들기 - 액션(헤더 채우기)

반응형

액션은 워드프레스에서 발생하는 특정 이벤트에 이해 실행된다

(포스트작성, 테마 변경, 관리자화면등)

 

wp_enqueue_style('handle-name', get_stylesheet_uri());

기본 스타일시트 include

 

add_action("wp_enqueue_scripts', 'function_name');

기본 스타일시트 include 함수를 등록

 

add_action("after_setup_theme','function_name');

기본 테마 설정 함수를 등록 

 

 

action 동작 원리 테스트

 

action-test.php

<?php
$action_list = [];

function add_action($tag, $function)
{
    global $action_list;
    $action_list[$tag][] = $function;
}

function do_action($tag)
{
    global $action_list;
    if (!empty($action_list[$tag])) {
        foreach ($action_list[$tag] as $function) {
            call_user_func($function);
        }
    }
}

add_action('5지점 진입 직전', function(){
    echo '4.5';
    echo '<br>';
});

add_action('5지점 진입 직후', function(){
    echo '<br>';
    echo '5.5';
    
});


echo '<pre>';
echo 1;
echo '<br>';
echo 2;
echo '<br>';
echo 3;
echo '<br>';
echo 4;
echo '<br>';
do_action('5지점 진입 직전');
echo 5;
do_action('5지점 진입 직후');
echo '<br>';
echo 6;
echo '<br>';
echo 7;
echo '<br>';
echo 8;
echo '<br>';
echo 9;
echo '<br>';
echo 10;
echo '</pre>';

 

add_action에서는 actions_list 배열에 함수를 추가해주는 함수이다.

 

do_action은 action_list내 함수를 실행하는 함수이다 

 

4.5와 5.5가 출력된것을 확인 할 수 있다. 

 

이제 위 코드를 분리해서 관리해 준다.

 

action-init.php

<?php
// core파일 변경하면 안된다 
$action_list = [];

function add_action($tag, $function)
{
    global $action_list;
    $action_list[$tag][] = $function;
}

function do_action($tag)
{
    global $action_list;
    if (!empty($action_list[$tag])) {
        foreach ($action_list[$tag] as $function) {
            call_user_func($function);
        }
    }
}

action-test.php

 

<?php
// core파일 변경하면 안된다 
require 'action-init.php';
require 'action-custom.php';

// CMS

echo '<pre>';
echo 1;
echo '<br>';
echo 2;
echo '<br>';
echo 3;
echo '<br>';
echo 4;
echo '<br>';
do_action('5지점 진입 직전');
echo 5;
do_action('5지점 진입 직후');
echo '<br>';
echo 6;
echo '<br>';
echo 7;
echo '<br>';
echo 8;
echo '<br>';
echo 9;
echo '<br>';
echo 10;
echo '</pre>';

 

위 두파일은 core파일로써 테마및 플러그인 개발자들이 고칠수 없는 부분들이다 .

action-custom.php

<?php
// 테마, 플러그인 개발자들이 고칠 수 있는 파일 
add_action('5지점 진입 직전', function(){
    echo '4.5';
    echo '<br>';
});

add_action('5지점 진입 직후', function(){
    echo '<br>';
    echo '5.5';
    
});

 

 

 

bookstore에 적용하기

functions.php

<?php
function bookstore_register_post_type(){
    register_post_type('book', [
        'has_archive' =>true,
        'labels' => [
            'name'                  => '책',
            'singular_name'         => '책',
            'menu_name'             => '책',
            'name_admin_bar'        => '책',
            'add_new'               => '새 책 추가',
            'add_new_item'          => '새 책을 추가합니다',
            'new_item'              => '새 책',
            'edit_item'             => '책 수정',
            'view_item'             => '책 보기',
            'all_items'             => '책 목록 ',
            'search_items'          => '책 검색',
            'parent_item_colon'     => '상위 책:',
            'not_found'             => '현재 입력한 책이 없습니다.',
            'not_found_in_trash'    => '휴지통에 책이 없습니다',
            // 'featured_image'        => '',
            // 'set_featured_image'    => '',
            // 'remove_featured_image' => '',
            // 'use_featured_image'    => '',
            // 'archives'              => '',
            // 'insert_into_item'      => '',
            // 'uploaded_to_this_item' => '',
            // 'filter_items_list'     => '',
            // 'items_list_navigation' => '',
            // 'items_list'            => '',
        ],
        'public' =>true,
        'menu_position' => 3,
        'menu_icon' => 'dashicons-book'
        // 'menu_icon' => get_template_directory_uri().'/images/open-book.svg'
    ]);
}
add_action('init', 'bookstore_register_post_type');
add_action('wp_enqueue_scripts',function(){
    wp_enqueue_style('mbs-style',get_stylesheet_uri());
});

add_action을 통해

wp_enqueue_scripts 때 해당

wp_enqueue_style을 호출해준다. 

 

style.css

/*
Theme Name: Bookstore
Author: loy124
Author URI: https://loy124.tistory.com/
Description: Bookstory Theme
Requires at least: 4.9.6
Requires PHP: 5.2.4
Version: 0.1
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: Bookstore
Tags: one-column, bookstore

This theme, like WordPress, is licensed under the GPL.
Use it to make something cool, have fun, and share what you've learned with others.
*/

html {
    font-size: 100%;
    line-height: 1.8;
}

a{
    color:black;
    text-decoration: none;
}

a:hover{
    text-decoration: underline;
}

 

 

 

정상적으로 style이 반영되어 있다.

 

title 변경하기 

 

functions.php

<?php
function bookstore_register_post_type(){
    register_post_type('book', [
        'has_archive' =>true,
        'labels' => [
            'name'                  => '책',
            'singular_name'         => '책',
            'menu_name'             => '책',
            'name_admin_bar'        => '책',
            'add_new'               => '새 책 추가',
            'add_new_item'          => '새 책을 추가합니다',
            'new_item'              => '새 책',
            'edit_item'             => '책 수정',
            'view_item'             => '책 보기',
            'all_items'             => '책 목록 ',
            'search_items'          => '책 검색',
            'parent_item_colon'     => '상위 책:',
            'not_found'             => '현재 입력한 책이 없습니다.',
            'not_found_in_trash'    => '휴지통에 책이 없습니다',
            // 'featured_image'        => '',
            // 'set_featured_image'    => '',
            // 'remove_featured_image' => '',
            // 'use_featured_image'    => '',
            // 'archives'              => '',
            // 'insert_into_item'      => '',
            // 'uploaded_to_this_item' => '',
            // 'filter_items_list'     => '',
            // 'items_list_navigation' => '',
            // 'items_list'            => '',
        ],
        'public' =>true,
        'menu_position' => 3,
        'menu_icon' => 'dashicons-book'
        // 'menu_icon' => get_template_directory_uri().'/images/open-book.svg'
    ]);
}
add_action('init', 'bookstore_register_post_type');
add_action('wp_enqueue_scripts',function(){
    wp_enqueue_style('mbs-style',get_stylesheet_uri());
});



add_action('after_setup_theme', function(){
    add_theme_support('title-tag');
});

add_theme_support('title-tag')

 

title은 

사이트 제목 + 태그라인의 구성으로 되어있다. 해당 설정을 바꿔주고 나서 새로고침을 해보면 

변경이 되어있는것을 확인 할 수 있다.

반응형