Skip to content

CHICPRO

  • Life Log
  • Cycling Log
  • Photo Log
    • Portrait
    • Landscape
    • Flower
    • Etc
  • Coding Log
  • Information

워드프레스에 Prismjs 적용

2020-07-30 by 편리

하는 일이 PHP 개발이다 보니 이 블로그에 개발 코드를 포스팅할 때가 있는데 이럴 때 가독성을 높이기 위해 SyntasxHighlighting 을 플러그인 등을 이용해 적용해 왔다. 최근에 Prismjs 관련 내용을 접하고 블로그에 적용하기 위해 워드프레스 플러그인 등을 설치해보기도 했지만 마음에 들지 않아 결국은 직접 적용해보는 것으로 정하고 시간을 투자해서 작업을 마무리 했다.

Prism is a lightweight, extensible syntax highlighter, built with modern web standards in mind.

워드프레스 테마에 관련 코드를 추가해야 하는데 이렇게 할 경우 테마가 업데이트 되면 관련 코드를 다시 추가해야 하는 문제가 있어 child 테마를 사용하기로 했다. 현재 사용 중인 테마는 Sparkling 테마로 child 테마는 여기서 다운로드 할 수 있다.

Prismjs 관련 js, css 파일은 공식 다운로드 페이지에서 다운로드 한다. 다운로드 때 테마와 사용할 언어, 그리고 플러그인 등을 선택해야 한다. 나의 경우 php, python 등의 언어 추가와 copy 플러그인을 선택했다. 너무 많이 선택할 경우 js 파일의 용량이 그 만큼 커지기 때문에 웹페이지 로딩 속도를 고려해 적당히 선택해야 한다. Prismjs 파일을 적용시키지 위해 테마의 functions.php 파일에 아래의 코드를 추가한다.

add_action( 'wp_enqueue_scripts', 'add_prism', 99 );

function add_prism()
{
    wp_enqueue_style( 'prism-css',  get_stylesheet_directory_uri() . '/prism.css',[], '0.0.1' );
    wp_enqueue_script( 'clipboard-js',  get_stylesheet_directory_uri() . '/clipboard.min.js', [], false, true );
    wp_enqueue_script( 'prism-js',  get_stylesheet_directory_uri() . '/prism.js', [], '0.0.1', true );
}

위 코드 중 clipboard.min.js 는 코드 복사 기능을 위해 사용된다. 클립보드 복사 기능을 사용하지 않을 것이라면 추가하지 않아도 된다. 이렇게 하면 기본 작업은 마무리가 됐다. 추가적으로 기존에 사용하던 syntaxhighlighting 플러그인이 있을 경우 해당 코드 부분은 Prismjs 가 적용되지 않을 수도 있기 때문에 해당 부분을 치환하여 적용이 되도록 하는 작업을 해야 한다. 아래 내용은 반드시 필요한 부분은 아니며 동일한 플러그인을 사용했거나 또는 이를 참고해서 상황에 맞게 코드를 수정해줘야 한다.

add_filter ('the_content', 'apply_prism_js', 100);

function apply_prism_js($content) {
    if(is_single()) {
        if(!$content)
            return $content;

        $pattern = array(
            '#\<pre\s*class="Enlighter[^\>]+>([^<]+)</pre>#is',
            '#\<pre\s*class="lang[^>]+>([^<]+)</pre>#is',
            '#\<pre\s*class="brush:([^;]+)[^>]+>([^<]+)#is',
        );

        $replace = array(
            '<pre><code class="language-php">\\1</code></pre>',
            '<pre><code class="language-php">\\1</code></pre>',
            '<pre><code class="language-\\1">\\2</code></pre>',
        );

        $content = preg_replace($pattern, $replace, $content);
    }

    return $content;
}

포스트 작성 때 Primjs 가 적용되도록 하기 위해서는 아래와 같이 Code 블럭을 이용하면 된다.

블럭 설정에서 위 이미지와 같이 언어 CSS class 를 추가해주면 된다.

Post navigation

Previous Post:

jQuery File Upload 를 이용한 파일 업로드 커스터마이징

Next Post:

CentOS 7 + Laravel 그 삽질의 기록

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • SK 세븐모바일 유심 셀프교체
  • php 배열 연산에서 + 와 array_merge 의 차이
  • pcntl_fork 를 이용한 다중 프로세스 실행
  • 아이폰 단축어를 이용하여 주중 공휴일엔 알람 울리지 않게 하기
  • 구글 캘린더 전체일정 재동기화
  • OpenLiteSpeed 웹서버에 HTTP 인증 적용
  • OpenLiteSpeed 웹어드민 도메인 연결
  • WireGuard를 이용한 VPN 환경 구축
  • Ubuntu 22.04 서버에 OpenLiteSpeed 웹서버 세팅
  • 맥 vim 세팅

Recent Comments

  • 편리 on 업무관리용 그누보드 게시판 스킨
  • 임종섭 on 업무관리용 그누보드 게시판 스킨
  • 캐논 5D 펌웨어 | Dslr 펌웨어 업그레이드 방법 82 개의 베스트 답변 on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • Top 5 캐논 5D 펌웨어 Top 89 Best Answers on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 임팀장 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 CHICPRO | Built using WordPress and SuperbThemes