[카테고리:] 워드프레스 개발

  • 워드프레스 플러그인에서 HMR 사용하기

    이게 정확한 방법인지 확실한 문서화된 자료는 찾지 못했지만, 소스 코드를 뜯어 보다가 발견한 방법이다. 적당히 기록해 둔다. 공식적인 방법을 찾으면 수정하기 바란다.

    H.M.R (Hot Module Replacement)은 정말 쓸만하다. 그래서 워드프레스에서 wp-script를 활용한 리액트 컴포넌트 개발할 때 사용하고자 한다.

    스크립트 설치

    우선, 워드프레스의 공식 스크립트를 활용한다.

    pnpm add -D @wordpress/scriptsCode language: Bash (bash)

    포스트 작성시 @wordpress/scripts 의 버전은 23.0.0 이다.

    명령어 등록

    package.json 에서 ‘scripts’ 에 ‘start’ 명령어를 등록한다.

    {
      ...
      "scripts": {
        "start": "NODE_ENV=development wp-scripts start --hot",
        "build": "wp-scripts build"
      },
      ...
    }Code language: JSON / JSON with Comments (json)

    이 때 ‘–hot’ 파라미터를 붙이는 것이 필수. start에는 위 예시처럼 NODE_ENV 환경 변수를 ‘development’로 맞춘다.

    WP-CONFIG 상수 등록

    define( 'WP_ENVIRONMENT_TYPE', 'development' );
    define( 'SCRIPT_DEBUG', true );Code language: JavaScript (javascript)

    NPM 페이지에 따르면 ‘SCRIPT_DEBUG’를 설정하라고 되어 있다.

    WEBPACK 설정 수정

    const defaultConfig = require('@wordpress/scripts/config/webpack.config')
    const isProduction = process.env.NODE_ENV === 'production';
    
    if (!isProduction) {
        module.exports = {
            ...defaultConfig,
            devServer: {
                ...defaultConfig.devServer,
                allowedHosts: [
                    '127.0.0.1',
                    'localhost',
                    '.dev.site', // NOTE: match your domain.
                ],
                hot: true
            }
        }
    } else {
        module.exports = defaultConfig;
    }Code language: JavaScript (javascript)

    보통 localhost나 127.0.01 같은 IP 그대로는 개발하지 않으므로 주석으로 ‘NOTE’ 친 부분을 개발 도메인으로 설정한다. 앞에 ‘.’ 이 붙어 와일드카드가 적용된다. 그러므로 이 부분을 변경하기 위해 플러그인의 루트에 webpack.config.js 를 넣어 설정을 오버라이드한다.

    코드 작성

    리액트 코드를 작성한다. 예를 들어, 나의 index.js의 최상위 콤포넌트는 아래처럼 작성했다.

    import React from 'react';
    import ReactDOM from 'react-dom';
    import Dummy from "./dummy";
    
    function App(props) {
        const {title, you} = props;
    
        return (
            <div>
                <p>Oh! Hello, new world!</p>
                <p>You are {title}. {you}.</p>
                <Dummy />
            </div>
        )
    }
    
    const wpHmrSample = Object.assign({
        you: 'Unknown',
        title: '',
    }, window.hasOwnProperty('wpHmrSample') ? window.wpHmrSample : {})
    
    ReactDOM.render(<App {...wpHmrSample} />, document.getElementById('wp-hmr-sample'))
    
    if (module.hot) {
        module.hot.accept();
    }Code language: JavaScript (javascript)
    결과 화면

    스크립트 의존성

    wp-scripts에 의해 생성된 build/index.js 파일은 ‘wp-react-refresh-runtime’ 스크립트에 의존성을 가진다. 이를 확인하려면 build/index.asset.php 파일을 열어 보면 된다.

    구텐베르크 플러그인을 활성화하거나, 혹은 활성화 하지 않아도 해당 스크립트의 위치를 찾아 내 플러그인에서 강제로 넣어버린다. 나는 후자를 취했다. 어쨌든 두 방식 다 구텐베르크 플러그인은 설치된 상태여야만 한다.

    결과 비디오와 남은 문제

    작성한 플러그인 샘플 코드는 github에 올려 두었다. 그리고 실행 결과도 캡처하여 비디오로 남겨 둔다.

    아직 잘 모르는 부분까지 같이 비디오로도 남겼다. 영상 후반에 보면 App 컴포넌트 안에 있는 Dummy 컴포넌트를 수정하는 경우, 수정된 상황을 잘 감지는 하는 것 같지만 적용되지가 않는다. 왜 그런지는 아직 잘 모르겠다. 리액트가 변경된 컴포넌트를 렌더링하지 않아서 그런건지, 아니면 설정이 잘못된 것인지. 이것은 차차 알아가도록 하자.

  • WP CLI 캐시에 대해 메모

    WP CLI 캐시에 대해 메모

    WP CLI로 많이 사용하는 명령어 중 하나는 워드프레스 코어 파일을 다운로드 받는 것이다.

    워드프레스 루트 디렉토리를 만들고, 거기서 wp core download를 입력하면 최신 버전의 코어 파일이 다 준비되니 편리하다.

    그런데, 나는 개인적으로 문제가 하나 있다. SK 브로드밴드 인터넷을 사용하면 해외 사이트로의 다운로드 속도가 미칠듯이 느리다. 대략 워드프레스 코어 파일을 압축하면 20메가바이트 내외인데, 대략 5분 이상의 시간이 걸린다. 그렇다. 나는 SK 인터넷을 사용한다. 어쩌다 집에서 다운로드를 받으면 타임아웃에 걸릴 정도로 느리다.

    이 때 한가지 요령이 있다. ~/.wp-cli/cache 디렉토리에 WP CLI는 미리 파일을 캐시해 두었다가 매번 다운로드 받지 않고 여기의 파일을 재활용한다.

    이 cache 디랙토리에는 core, plugin, translation 등의 디렉토리가 있는데, 이 core 디렉토리에 코어 파일을 버전과 언어별로 압축 파일을 저장해 둔다.

    예를 들어, 워드프레스 5.8.3버전의 한국어 버전은 wordpress-5.8.3-ko_KR.zip으로 저장된다. 한편 영문 버전은 wordpress-5.8.3-en_US.tar.gz로 저장된다. 왜 영문 버전은 .tar.gz로 받아지고 한국어는 .zip으로 받아지는건지, 이게 규칙인지는 잘 모르겠다.

    참고로 영문 코어를 받으려면 https://wordpress.org/wordpress-{version}.{zip,tar.gz} 처럼 URL을 입력하면 된다.

    한국어 코어는 https://ko.wordpress.org/wordpress-{version}-ko_KR.{zip,tar.gz} 처럼 URL을 입력하면 된다.

    영문 최신 버전은 https://wordpress.org/latest.tar.gz 으로 받을 수 있다. 그러므로 한줄짜리 워드프레스 설치 스크립트를 아래처럼 응용해 볼 수도 있긴 하다.

    mkdir ~/wp_root && cd ~/wp_root
    wget -O - 'https://wordpress.org/latest.tar.gz' | tar xzf - --strip=1

    암튼 정리하자. wp core download 다운로드 속도가 너무 느려 타임아웃까지 걸리는 문제가 생길 때는 이렇게 하자.

    1. 워드프레스 코어 파일을 웹브라우저나 다운로드 관리자 같은 걸로 어쨌든 받는다.
    2. 영문이면 wordpress-{version}-en_US.tar.gz 로, 한국어는 wordpress-{version}-ko_KR.tar.gz 로 이름을 변경한다.
    3. 변경된 파일을 ~/.wp-cli/cache/core로 이동한다.
    4. wp core download 시 캐시 히트가 발생하는지 확인해 보자.

    워드프레스 자동 설치 스크립트와 연동하여 편의성도 제고해보자.

  • 성가신 메시지 Xdebug: [Step Debug] Could not connect to … 제거

    XDebug 3 이후 계속 이런 메시지가 나온다.

    Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-(

    디버깅과 관련 없는 부분인데도 자꾸 나와 성가시다. 이럴 때는 php 설정에 아래 사항을 하나 추가해 보자.

    xdebug.log_level=0

  • Naran Social Share 0.2.0

    Naran Social Share 0.2.0

    나란 소셜 공유 플러그인을 0.2.0으로 업데이트했습니다.

    • 한국어 번역이 추가되었습니다.
    • 기타 편의성이 향상되었습니다.

    다운로드

  • Naran Social Share 0.1.0

    빡빡하게 짜여져 있지 않고, 개발자가 원하는 대로 맞춰 쓸 수 있는 소셜 공유 플러그인.

    지원하는 서비스

    • 페이스북
    • 트위터
    • 링크드인
    • 카카오톡
    • 네이버 블로그
    • 텔레그램
  • Naran Session

    쿠키 – Transient API를 엮어 만든 간단한 세션.

    간단하게 각 접속자마다 구분된 값을 처리할 때 유용하다.