워드프레스 포스트 편집 화면에 메타박스 추가하기

위 이미지와 같은 커스텀 메타박스를 편집 화면에 추가하는 방법으로 플러그인 형태로 코드를 작성했다.

<?php

/**
 * @package Codepub Meta box
 * @version 1.0
 */
/*
Plugin Name: Codepub Meta box
Plugin URI: https://ncube.net/
Description: This plugin add custom meta box.
Author: chicpro
Version: 1.0
Author URI: https://ncube.net/
*/

// meta box render
function codepub_meta_box($post)
{
    wp_nonce_field( basename( __FILE__ ), 'codepub_meta_box_nonce' );

    $codepub_meta_box_value = (int)get_post_meta($post->ID, 'codepub_meta_box_value', true);

    echo '<div>'.PHP_EOL;
    echo '<p>'.PHP_EOL;
    echo '<input type="checkbox" name="codepub_meta_box_value" id="codepub_meta_box_value" value="1"'.($codepub_meta_box_value ? ' checked="checked"' : '').'>'.PHP_EOL;
    echo '<label for="codepub_meta_box_value">메타박스</label>'.PHP_EOL;
    echo '</p>'.PHP_EOL;
    echo '</div>'.PHP_EOL;
}

function add_codepub_meta_box()
{
    foreach (array('post', 'page') as $post_type)
        add_meta_box( 'codepub_meta_box', __( 'Codepub 메타박스', 'codepub_meta_box' ), 'codepub_meta_box', $post_type, 'side', 'low' );
}

// Save meta value
function save_codepub_meta_box_data($post_id)
{
    if ( !isset( $_POST['codepub_meta_box_nonce'] ) || !wp_verify_nonce( $_POST['codepub_meta_box_nonce'], basename( __FILE__ ) ) ) {
        return;
    }

    // return if autosave
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // Check the user's permissions.
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
    }

    if ( isset( $_REQUEST['codepub_meta_box_value'] ) ) {
        update_post_meta( $post_id, 'codepub_meta_box_value', sanitize_text_field( $_POST['codepub_meta_box_value'] ) );
    } else {
        // delete data
        delete_post_meta( $post_id, 'codepub_meta_box_value' );
    }
}

add_action( 'admin_init', 'add_codepub_meta_box' );
add_action( 'save_post',  'save_codepub_meta_box_data' );

33 라인의 array('post', 'page') 에서 워드프레스 포스트 타입이 postpage인 경우에만 메타박스가 출력된다. 메타박스 디자인 부분과 데이터를 저장하는 부분이 포함되어 있다.

WordPress 에 Redis Cache 적용하기

좀 더 빠른 속도를 위해 워드프레스에 Redis 캐시를 적용했다. 적용 결과는 일단 만족스럽다. 구글 페이지스피드 분석 도구에서도 이전 보다는 좋은 점수가 나오는데.. 이 정도면 만족스러운 결과가 아닌가 싶기도 하다. Redis 캐시를 적용하기 위해서는 Redis 를 서버에 설치해야 한다. 아래는 우분투 16.04 기준으로 Redis 서버 패키지를 설치하는 것이다.

# apt install redis-server

다음으로 PHP 에서 Redis 서버에 접근하기 위해 php-redis 패키지를 설치한다.

# apt install php7.2-redis

Redis 서버를 실행한다.

# service redis-server start

다음으로 wp-config.php 파일에 아래 설정을 추가한다.

define('WP_CACHE', true);
define('WP_CACHE_KEY_SALT', 'example.com');

SALT 부분의 값은 사이트 도메인 등으로 변경해 준다. 이 과정을 하지 않으면 하나의 서버에서 여러 개의 워드프레스를 운영하는 경우 뜻하지 않는 오류를 경험할 수 있다.

이제 워드프레스에서 Redis 캐시 사용을 위한 플러그인을 설치한다. 플러그인은 https://wordpress.org/plugins/redis-cache/ 이다. 플러그인 설치 후 아래와 같이 Enable Object Cache 버튼을 클릭해 Objec Cache 를 활성화 한다.

워드프레스 굿스플로 알림톡 플러그인 개발

워드프레스를 사용하고 있긴 하지만 플러그인 개발 등에 대해서는 깊게 공부를 해본 적이 없어서 알림톡 플러그인을 잘 개발할 수 있을까 걱정을 했는데.. 닥치면 다 한다는 일념하에 무작정 플러그인 개발을 시작했는데 원하는대로 개발을 마칠 수가 있어서 너무나 다행이라고 생각하고 있다. 지난 주부터 개발을 했으니 실제 작업 기간은 5일 정도로 생각하면 될 듯 하다. 관리자 설정 페이지 만드는 것부터 모두 새로운 것이었으니.. 나름 선방한 게 아닌가 생각하며 위안을 삼고 있다.

기능은 위 설정 화면과 같이 각 결제 수단에 맞게 알림톡을 발송하는 것이다. 일반적인 환경이라면 좀 더 쉽게 개발을 할 수도 있었겠지만 아무래도 워드프레스 환경이다 보니 그에 맞춰서 개발하는 게 쉽지가 않았다. hook의 개념부터 공부를 했다고 하면 될  것 같다. Read More

Typora를 이용해 워드프레스 블로그 포스트를 Steemit에 등록하기

얼마 전 Steemit 계정을 신청하고 주말에 승인이 돼서 가입을 마무리 한 후 Steemit에 포스트를 올려보고 있다. 블로그의 포스팅 중 몇 가지를 추려서 올리는 중인데.. Steemit에서는 Markdown 에디터를 이용하는데 이 형식에 맞추는 게 사실 많이 귀찮아서 방법을 찾아보던 중 Markdown 형식으로 글을 작성할 때 사용하기로 한 Typora 에디터가 생각나서 이를 이용해 포스트를 Steemit으로 옮겨봤다. 워드프레스 플러그인 중 포스트 작성 때 Steemit으로 자동 등록해주는 것이 있지만 기존에 작성했던 포스트에서는 아직까지는 사용할 수 없어 Typora 에디터를 사용했다. Read More