Skip to Content
Go Back
안형우

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

📌 워드프레스, 답답한 빌더와 플러그인 대신 시원하게 커스터마징하기(강의) 2023-01-15
📌 아무도 말하지 않는 PHP의 좋은 점 2018-10-13
📌 유지보수하기 쉬운 CSS 전략(슬라이드) 2016-12-20
📌 워드프레스 테마에서 템플릿 파일 매칭 순서 2013-05-12
📌 [번역] CSS 코드 냄새 2013-01-01

[워드프레스] 기본 콘텐츠 포매팅 함수 – the_content 필터 거치지 않고 the_content 효과 내기

이거 뭐라고 표현해야 할지 모르겠는데 여튼간에, 기본 콘텐츠 포매팅 함수라고 대충 써 봤다. 그니까 뭐냐면… 각종 플러그인들이 the_content()를 건드리기 전의 순수한 the_content()를 말하는 거다.

예컨대, 팝업을 띄운다고 하자. 내용을 입력하고 첫 화면에 띄우고 싶다. 그런데 줄바꿈 한 건 p로 감싸고 싶고, SNS 버튼 플러그인이 붙여 준 SNS 버튼은 떼버리고 싶다. 어떻게 해야 할까? the_content 필터를 통과시키면 SNS 버튼이 붙어 버리고, 통과시키지 않으면 줄바꿈이 되지 않는다! 줄바꿈뿐이 아니다. 큰따옴표도 제대로 표현되지 않고, 워드프레스가 제공하는 Content Formatting에 관련한 여러 가지 효과를 모두 제대로 사용할 수 없게 된다. SNS 버튼 플러그인 때문에!

방법이 있다. 워드프레스는 Open Source니 검색을 했다. the_content로 전체 파일 검색을 한 거다. 그러니, the_content 필터에 기본 세팅되는 함수들을 찾을 수 있었다.(워드프레스 3.5 기준 wp-includes/default-filters.php 파일의 135라인) 그렇다. 이 함수들을 그냥 주욱 써 주면 되는 것이다.

아래 코드처럼 써 주면 된다.

$popover_content = wptexturize($popover_content);
$popover_content = convert_smilies($popover_content);
$popover_content = convert_chars($popover_content);
$popover_content = wpautop($popover_content);
$popover_content = shortcode_unautop($popover_content);
$popover_content = prepend_attachment($popover_content);
echo $popover_content;

각 함수들의 설명은 워드프레스 코드를 뜯어 보면 나온다. 이클립스에서 코드 점프 하면 된다. 내가 궁금했던 건 단순 줄바꿈을 brp 태그로 변경해 주는 거였는데, 그 함수는 wpautop()였다. wptexturize()'",,로 바꿔 주는 함수다.

뭐, 이정도면 됐겠지?

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

댓글 (5개)

  • 좋은 정보 공유해주셔서 감사합니다. 그리고.. 질문이 있어 또 들렸습니다. ^^;;;;;
    검색, phpschool 등을 찾아봐도 워프와 직접적으로 관련된 내용은 찾기가 힘들고, codex 봐도 몰라요. ㅠㅠ

    1) 부모(?)페이지에서 get_template_part( ‘content’, ‘list-widget’ ); 로 content-list-widget.php 파일을 불러오는데 변수 공유가 안되요. php에서 include 나 require로 불러들여도 변수 공유가 가능한걸로 알고 있는데요…

    2) 하고 싶은 것 : 본문글 하단에 현재 카테고리 글 목록을 불러와서 현재 보고 있는 글은 별도 표시를 하고 싶은데요.. content-list-widget.php 에서 아래와 같이 코드를 작성했어요.

    global $current_post_id; // 불러오는 부모(?) 페이지에서 정의한 변수(부모페이지 변수값 : 2589)
    echo ‘현재 글 id = ‘ . $current_post_id; // ‘ ‘ 출력(아무것도 안 찍힘, 현재 보고 있는 본문글 id)
    echo ‘각 글 id = ‘ . get_the_ID(); // 정상 출력(아래 코드에서 루프 돌면서 해당 글 id 정상 출력)
    $current_post_class = ( get_the_ID() == $current_post_id )? ‘current-post-item’ : ”; // 비교, css 클래스 부여

    3) 뭐가 잘못 된건지 힌트 좀 주시면 감사하겠습니다. (번거롭게 죄송해요 ㅠㅠ)

      • 질문 드려놓고 다른 일로 깜빡 잊었다가 다시 들렸습니다. 새해 복 많이 받으세요~ ^^

    • 변수 세팅을 한 뒤에 template 안에서 global $var_name; 선언을 하면 사용할 수 있거든요. ‘아마추어’ 님이 하신대로 말예요. 그래서 제 생각엔 다른 오류가 있는 것 같아요. 제가 테스트해 보니 global 선언으로 작동하거든요.

      참고로, get_template_part()include, require를 함수 안에서 처리하기 때문에 global 선언을 해야 바깥 변수를 사용할 수 있는 거죠.

      • 답글 감사합니다.. 저는 아직도 원인을 못 찾아서.. 일단 방치중예요. ^^;;

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다