Mediteam.us 개발 - 워드프레스를 바깥(외부)에서 이용하기(PHP), 요약문(Excerpt)
스팀을 처음 블로그로 시작하신분들은 사실 워드프레스를 익힐 이유가 전혀 없습니다만,
저처럼 오랫동안 워드프레스를 사용하던 사람한테는 워드프레스가 스팀 글쓰기의 툴로써도 매우 편리함이 많습니다.
큰 이미지의 경우 알아서 크기를 800x600등으로 수정한 파일을 생성해주기도 하고요.
이번 포스팅은 그 활용에 대한 한가지 예가 되겠습니다.
Mediteam.us 개발의 핵심은 Steem 포스팅을 HTML로 변환하여 DB에 넣는 것이었습니다.
그러나 사실 맨 처음에는 변환된 HTML을 워드프레스에 넣는 방향으로 시작했었습니다만, 몇가지 제약과 단점들이 있었습니다. 그것은,
워드프레스에서 제공하는 RestAPI가 완벽하지 않다. (특히 생성일, 수정일을 임의로 수정하기가 잘 이루어지지 않음)
직접 Wordpress DB를 건드릴 경우 에러가 발생할 가능성 존재
Wordpress에서 글을 작성한 후 HTML소스를 복붙하면 스팀에서도 바로 글이 완성됨
문서 내용에 대한 처리가 복잡할 수 있음
등이었습니다. 그러나, (실제로 Mediteam.us 사이트에 적용될지는 아직 미지수입니다만)
몇가지 활용할 수 있는 방법이 있었습니다. 그 중 하나가 바로 대문.
예를 들면 위와 같은 공지글, 혹은 사설 같은 내용은 스팀잇을 이용할 수도 있지만, 일주일 후에 수정이 불가능한 점에서 조금 더 확장성이 요구될 수 있는 위치입니다.
즉, 이럴 경우 우리는 워드프레스에 글을 아래와 같이 입력한 뒤, 그 내용을 빼오는 방법을 취하면 됩니다.
이 과정은 사실 아주 간단합니다.
이전에 개인 블로그에 적었던, Wordpress로 환자 DB 만들기 에 한차례 사용했던 방법입니다. 사실 엄밀히 말하면 '외부'에서 이용한다는 것이 완전한 cross domain은 아닙니다. 적어도 같은 서버여야 할 것 같습니다.(다른 계정에서 시도는 안해봤네요)
우선 파일의 가장 위에 아래와 같이 워드프레스가 설치된 기본 폴더에 있는 wp-load.php를 불러옵니다.
require_once( dirname( __FILE__ ) . '/wp-load.php' );
그리고 $wpdb라는 변수를 이용해서 원하는 값들을 불러오는 쿼리를 작성합니다. 위의 사진의 예제에서는 다음과 같습니다.
$query = new WP_Query('category_name=editorial&posts_per_page=1');
$posts = $wpdb->get_results('SELECT * FROM '. $wpdb->prefix.'posts');
Query의 내용은 카테고리 이름이 'editorial'이고 1페이지당 1개의 포스트를 받아오려고 한다.(즉 하나만 받겠다).
$wpdb->prefix는 워드프레스 설치시 세팅하는(예:wp_) DB테이블의 접두어입니다.
그리고 포스팅이 있다면 그 내용을 출력하는 부분을 아래의 ...처리...쪽에 둡니다.
if($query->have_posts()) : while($query->have_posts()) : $query->the_post();
...처리...
endwhile;endif;
the_post()가 실행되면서 위의 구간 내에 글이 해당 글이 세팅되게 되는데,
<?php the_title(); ?>
// get_the_title은 제목 문자열 받기, the_title은 바로 출력(echo 함수가 포함)
//has_post_thumbnail() - 썸네일(featured image)여부 확인
<?php the_post_thumbnail_url();?>
<?php the_excerpt();?> //요약문
<?php the_content();?>
위의 함수등으로 출력하거나 그 값을 구할 수 있습니다.
이번에 위의 과정을 작업하면서 '요약문'이라는 것을 처음 워드프레스에서 써봤는데요, 실제 본문이 길 경우 쓰기 매우 좋습니다.
글쓰기(Add New)에서 Screen Options에서 Excerpt를 누르면 맨 밑에 창이 하나 붙는데, 요약문을 사용하지 않을 경우,
the_content(); 는 모든 글이 다 출력되기 때문에 강제로 잘라야하고,
the_excerpt();를 쓰면 content내용이 줄바뀜등이 무시된채로 쭉 나열이 되어버립니다.
이런 문제를 해결하기 위해 excerpt를 직접 적어주면 깔끔해지는 것입니다.(첨부한 사진의 글이 요약문입니다)