WordPress

워드프레스 기초 (hook)

hojomu 2023. 9. 22. 13:55

워드프레스는 블로그 포스팅 처럼 홈페이지를 만들 수 있는 장치이다.

 

워드프레스의 특징은 DB와 연동해서 홈페이지의 구성 요소들을 DB로 부터 불러올 수 있기 때문에, 비슷한 모양의 홈페이지를 대량으로 찍어낼 때 유용하게 사용된다.

페이지의 프레임 뿐만 아니라 각 요소들의 CSS 나 세팅 까지도 DB에 연동시킬 수 있다.

 

1. 워드프레스 시작

워드프레스 페이지를 불러오면, 워드프레스의 버전이나 서버 세팅부터 로그인 여부 까지 기본적으로 필요한 세팅을 마치고 DB와 연동한다. DB와 연동한 이후에는 홈페이지를 나타내기 위한 요소들을 불러오는데,

Java Script나 boot strap , 플러그인 , hooks 등이 있다.

2. 플러그인

플러그인은 워드프레스에 유저가 커스터마이징 한 기능을 넣어서 사용할 수 있게 만든 기능이다.

이 플러그인은 wp-includes / plugin 에 저장되며, 페이지의 html, css를 작성하는 기능부터 게시판 만들기 기능, 슬라이드 기능 등 홈페이지에서 구현할 수 있는 모든 기능들을 library화 해서 사용할 수 있게 했다고 생각하면 된다.

 

3. hooks

워드프레스에서는 워드프레스에서 지정해놓은 명령어들이 있다

그 중 hook 이라고 불리는 녀석들이 큰 역할을 한다.

hook은 프로젝트 내 어디서나 사용될 수 있다.

 

add_action()

function my_custom_function() {
    // 원하는 작업 수행
}

add_action('wp_loaded', 'my_custom_function');

add_action 이후 첫 번째 매개변수에는 hook 나 식별자 , 두 번째 매개변수에는 실행시킬 함수나 식별자를 선언한다

여기서 나온 hook은 액션 후크라고 한다.

결국 add_action은 특정 이벤트가 발생할 때 함수를 실행시키는 요소다.

 

add_filter()    ,   apply_filters()

필터 후크에 함수를 추가
add_filter('filter_name', 'your_filter_function');

필터 후크에 걸린 함수를 실행 (결과를 반환한다)
$filtered_data = apply_filters('filter_name', $data_to_be_filtered);

필터 후크 예시
function custom_title_filter($title) {
    // 포스트 제목에 접두사를 추가
    return 'Prefix: ' . $title;
}

add_filter('the_title', 'custom_title_filter');

<p> apply_filters('the_title', $customedTitle); </p>

 

add_setting()   ,  add_control

워드프레스의 테마 커스터마이즈에 사용되는 함수로서 워드 프레서에서 웹 사이트의 디자인과 설정을 실시간으로 변경하고 미리보기 할 수 있는 도구를 제공한다.

주로 functions.php 에서 호출된다.

add_setting( $id, $args );

-> $id 에 $args 설정을 정의한 배열을 저장한다.

function mytheme_customize_register( $wp_customize ) {
    // Setting for Site Title
    $wp_customize->add_setting( 'site_title', array(
        'default'           => 'My Website',
        'sanitize_callback' => 'sanitize_text_field',
    ) );
    
    // Control for Site Title
    $wp_customize->add_control( 'site_title', array(
        'label'    => 'Site Title',
        'section'  => 'title_tagline',
        'type'     => 'text',
    ) );
}
add_action( 'customize_register', 'mytheme_customize_register' );

-> site_title 이라는 설정(옵션)을 추가하고 기본 값을 정의한 뒤, sanitize_text_field 함수를 통해 입력된 데이터를 정리한다.
그 다음 control에서 site_title 설정을 커스터마이즈 한다.

 

위의 함수는 사용자로부터 정보를 입력받고, 그 정보를 바탕으로 페이지를 커스터마이징 하는 함수라고 볼 수 있다.

add_action을 사용해서 불러올 수 있다

 

 

filter의 특이점

-> filter는 특수한 성질을 가진다. 바로 하나의 후크에 여러개의 필터를 추가할 수 있다.

후크에 걸린 각각의 필터는 후크를 불렀을 때, 후크에 걸렸던 순서대로 실행된다.

 

또한 필터 후크는 다른 후크에 걸 수 도 있다.

function example_callback( $string, $arg1, $arg2 ) {
    //(maybe) modify $string.
    return $string;
}

add_filter( 'example_filter', 'example_callback', 10, 3 );

$value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 );

example_callback() 이라는 함수는 인자 3개를 받고 $string을 반환하는 콜백 함수이다.

add_filter()로 'example_filter' 라는 후크에 이 콜백함수를 걸고, 10 , 3을 선언했는데, 10은 example_filter 가 실행됬을 때,  example_callback() 이 실행될 순서를 나타내고, 3은 example_callback()이 실행될 때 사용할 매개변수의 수 이다.

 

결국 $value 변수에 apply_filters 를 선언한 것은 example_filter 에 걸린 모든 콜백 함수를 filter me 라는 초기값과 $arg1, $arg2 라는 매개변수를 추가해서 실행하고 마지막 결과값을 저장한다.