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

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

<?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

워드프레스 JS 파일 감염 해킹 복구

예상치도 못했던 일 때문에 엄청 바쁜 하루를 보낸 듯 하다. 내 블로그가 아니라.. 회사에서 운영하는 블로그가 정상작동하지 않는다는 보고가 있어 살펴보니 요상한 아이피로 jquery.js 요청을 보내고 있었다. 아.. 요고 해킹이구나.. 싶은 생각이 들었다. 운영 중인 사이트였기 때문에 우선 복구가 먼저라고 생각했다. 개발 계정 세팅을 위해 백업해뒀던 소스 코드가 있어 그걸로 일단 파일을 전부 교체했다. wp-contents 디렉토리 내의 파일은 포스팅 데이터와 연관을 있을 수 있기 때문에 조심해서 파일을 교체했다. 그러나 그것만으로 쉽사리 복구는 되지 않았다. 원인을 찾을 수 밖에 없구나.. 하는 생각이 들었다. Read More