[WordPress] 페이지에 특정카테고리만 출력되게 하기

1. 블로그 정체성에 대한 고민

블로그에 워드프레스 정보 좀 제대로 넣어보자고 마음먹으니 고민이 생겼다.

이 블로그의 명칭은 Open your eyes…

뭔 의미가 있냐고? 없다. 그냥 사적인 블로그란 이야기다.
처음 의도는 세상사 좀 뒤집어서 생각해보자라는 것이었는데….

여기다가 여러가지 정보를 다 집어넣자니 너무 난잡해지겠고,
그렇다고 이 블로그를 버릴 수는 없고,
분점을 차리자니 관리할 자신이 없고.

그러다 이 방법이 생각났다.

  • 카테고리는 직관성이 떨어진다.
    • 페이지가 카테고리보다 훨씬 눈에 띈다.
      • 워드프레스 or 아이폰 페이지를 만드는 거야
        • 페이지를 클릭하면 특정 카테고리가 보이는거다.

그래서 검색 좀 해봤다.

2. index.php의 재활용

검색해보니 특정 포스트에 특정 카테고리의 내용을 출력가능케 해주는 플러그인이 있다.
하지만 사용해보니 내가 원하는 모양대로 출력이 안된다.
버려.

그러다 구글에서 국내블로그가 하나 나왔다.
오오 럭키. 읽고 따라해보니 무슨 내용인지 알겠다.

참고한 블로그

Nineye 님의 워드프로세스에서 특정 Post만 보여주는 Page 만들기

뭐, 사실 다를건 거의 없다. 다만 난 주어진 템플릿만 사용하는 것 뿐이다.
요는 다음과 같다. 지난번 카테고리를 리스트 형태로 출력하기 포스트와 동일하다.
현재 테마의 Index.php를 활용하던가 SinglePost.php를 활용하는 것이다.

다시한번 살펴보자 우리의 index.php.

[php]
<?php get_header(); ?>
<div id="content">
<div id="contentleft">

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h1>
<div class="date">
<?php the_time(‘F j, Y’); ?> &middot; Posted in <?php the_category(‘, ‘) ?> &middot; <?php comments_popup_link(‘Comment’, ‘1 Comment’, ‘% Comments’); ?>&nbsp;<?php edit_post_link(‘(Edit)’, ”, ”); ?>
</div>

<?php the_excerpt(); ?>
<div class="postmeta">

Tags: <?php if(get_the_tags()) { the_tags(”,’, ‘,”); }else{ echo "no tags"; } ?>
</div>

<?php endwhile; else: ?>

<?php _e(‘Sorry, no posts matched your criteria.’); ?>

<?php endif; ?>

<?php if(function_exists(‘wp_page_numbers’)) : wp_page_numbers(); endif; ?>
</div>

//사이드바 부분은 당연히 테마따라 틀리다.
//내가 사용하는 테마는 사이드바가 두줄이라서 이렇게 두번 호출되는거다.
<?php include(TEMPLATEPATH."/l_sidebar.php");?>

<?php include(TEMPLATEPATH."/r_sidebar.php");?>
</div>

<!– The main column ends –>

<?php get_footer(); ?>
[/php]

아, 복잡하다. 머리아프다.

하지만 복잡하게 생각할게 없다. 우리가 원하는 것만 집어넣거나 빼버리면 그만인것을.
일단 내가 원하는 요구사항은 다음과 같다.

상단의 WordPress 페이지를 클릭할때 워드프레스 카테고리의 모든 글을 목록형태로 출력하고 싶다.

따라서 우리는 지난번 함수를 재활용하여 원하는 형태로 출력할 수 있다.
워드프레스 Codex페이지, query_posts()에 관한 페이지다.

Function Reference/query posts

이 페이지에 따르면,

query_posts() can be used to control which posts show up in The Loop.

친절한 설명이다. 루프내에서 어떤 페이지들을 출력할지를 결정할때 사용!
다시 우리의(정확히는 나의) 요구사항을 보자.

워드프레스 카테고리의 모든 글을 목록형태로 출력

저 링크를 참조하여 다음과 같은 파라미터를 사용해야 함을 알았다.

  • cat=’출력할 카테고리 id’ 혹은
  • category_name=’출력할 카테고리 name’
  • posts_per_page=’-1′ 이면 모든 글 출력

이 파라미터를 적용하여 다시 index.php를 작성해보자.

[php]

<?php get_header(); query_posts( ‘posts_per_page=-1&cat=439’) ?>
<div id="content">
<div id="contentleft">

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h1>
<div class="date">
<?php the_time(‘F j, Y’); ?> &middot; Posted in <?php the_category(‘, ‘) ?> &middot; <?php comments_popup_link(‘Comment’, ‘1 Comment’, ‘% Comments’); ?>&nbsp;<?php edit_post_link(‘(Edit)’, ”, ”); ?>
</div>

<?php the_excerpt(); ?>
<div class="postmeta">

Tags: <?php if(get_the_tags()) { the_tags(”,’, ‘,”); }else{ echo "no tags"; } ?>
</div>

<?php endwhile; else: ?>

<?php _e(‘Sorry, no posts matched your criteria.’); ?>

<?php endif; ?>

<?php if(function_exists(‘wp_page_numbers’)) : wp_page_numbers(); endif; ?>
</div>

//사이드바 부분은 당연히 테마따라 틀리다.
//내가 사용하는 테마는 사이드바가 두줄이라서 이렇게 두번 호출되는거다.
<?php include(TEMPLATEPATH."/l_sidebar.php");?>

<?php include(TEMPLATEPATH."/r_sidebar.php");?>
</div>

<!– The main column ends –>

<?php get_footer(); ?>
[/php]

일단 완성.

3. 페이지에 index.php를 적용하자

페이지는 워드프레스 관리자 메뉴의 [Pages] -> [Add New]를 통해서 작성한다.
그것 자체는 간단하지만 우리는 아까 작성한 Index.php를 해당 페이지에 사용하면 된다.
어찌 사용하느냐?

해당 페이지의 템플릿으로 아까 작성한 index.php를 사용하는 것이다.

워드프레스에서 페이지의 템플릿은 테마별로 유지가 된다.
즉, 우리가 작성한 파일을 테마폴더에 복사하면 된다는 이야기.
하지만 이걸 index.php 그대로 두면 기존의 것을 덮어쓰므로 이름은 mypagetemplate.php와 같은 다른 이름으로 변경하여 복사한다.

그렇다면 페이지에 템플릿은 어찌 적용하느냐?
페이지 작성화면의 우측을 보면, [Page Attributes] 가 보일 것이다.
그곳에 [Page Template]이라는 Drop Down List가 보일 것이다.

하지만 단순히 우리가 아까 파일을 복사했다고 해서 템플릿 목록에 뜨질 않는다.
워드프레스는 특정 태그를 통해서 해당 파일이 템플릿 파일임을 인식한다.
아까 수정한 mypagetemplate.php의 맨 앞부분에 다음과 같은 줄을 삽입한다.

[php]

<?php
/*
Template Name: 당신의 템플릿 이름
*/
?>
[/php]

그리하야 다시 mypagetemplate.php를 작성하면 다음과 같겠다.
정상적으로 작성했다면 아까와 동일한 [Page Attributes] 탭의 [Page Template] 부분에 지정한 이름이 뜰것이다.

그 놈을 선택. 실제 페이지에 어떤 내용을 작성할 필요는 없다.
이제 테스트 해보자. 상단의 WordPress 페이지를 클릭해봐라.

잘된다.

4. 고급활용

여기서 끝나면 아쉽잖아.
좀 더 고급활용방안은 뭐가 있을까?
다음과 같은 요구사항이 있다.

“블로그 방문시 첫 화면에서는 일기장 카테고리를 제외한 나머지 카테고리만 출력하게 하고 싶다.”

아까의 페이지 방문으로 사용가능한 옵션을 찾아보자.

  • cat=’-카테고리id’ : 해당카테고리는 제외한다.
  • is_home() : 첫화면이면 true 반환, 아니면 false

간단하네, 다음과 같이 조립을 하면 되겠다.

[php]
//첫화면일땐 id가 14인 일기카테고리를 제외하고 아니면 다 출력한다고 가정
<?php if (is_home()) {
query_posts( ‘posts_per_page=10&cat=-14’);
}else{
query_posts( ‘posts_per_page=10’);
}
?>
[/php]

그런데 이렇게 페이지를 작성했는데 얘를 어떻게 나의 워드프레스 블로그에 적용시킬 것인가?
다음과 같은 두 가지 방법이 나온다.

  1. 정적페이지를 하나 작성하여 위에서 작성한 템플릿을 적용 후 해당 페이지를 블로그의 메인페이지로 등록한다.
  2. 현재 사용테마의 index.php 에 저 코드를 삽입한다.

1번이 더 쉬워보인다.
하지만 1번의 문제는 간편하지만, 쓸떼없는 페이지가 추가된다는 게 단점.
또한 대부분의 테마가 헤더의 바로 밑에 Home 부터 시작해서 페이지 링크를 걸어놓는다는게 문제다.
즉, 해당 테마의 header.php를 수정해서 우리가 작성한 페이지와 Home이 중복되서 안나오게 수정해야 한다는게 문제.

따라서 2번으로 가자. 쉽다. index.php에 해당 파라미터만 추가해주면 끝.

[php]
<?php get_header(); ?>

//첫화면일땐 id가 14인 일기카테고리를 제외하고 아니면 다 출력한다고 가정
<?php if (is_home()) {
query_posts( ‘posts_per_page=10&cat=-14’);
}else{
query_posts( ‘posts_per_page=10’);
}
?>
<div id="content">
<div id="contentleft">

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h1>
<div class="date">
<?php the_time(‘F j, Y’); ?> &middot; Posted in <?php the_category(‘, ‘) ?> &middot; <?php comments_popup_link(‘Comment’, ‘1 Comment’, ‘% Comments’); ?>&nbsp;<?php edit_post_link(‘(Edit)’, ”, ”); ?>
</div>

<?php the_excerpt(); ?>
<div class="postmeta">

Tags: <?php if(get_the_tags()) { the_tags(”,’, ‘,”); }else{ echo "no tags"; } ?>
</div>

<?php endwhile; else: ?>

<?php _e(‘Sorry, no posts matched your criteria.’); ?>

<?php endif; ?>

<?php if(function_exists(‘wp_page_numbers’)) : wp_page_numbers(); endif; ?>
</div>

<?php include(TEMPLATEPATH."/l_sidebar.php");?>

<?php include(TEMPLATEPATH."/r_sidebar.php");?>
</div>

<!– The main column ends –>

<?php get_footer(); ?>
[/php]

is_home(); 은 사용이 조금 애매한게, 내 블로그의 경우 http://mcdasa.cafe24.com/wordpress이 메인이다보니 이 자체를 is_home()에서 home으로 인식 못한다. 즉, false를 반환한다. 뭐, 이런게 있는지.

그러니깐 안먹는다 싶을때는 is_home()부분 을 제거하고 query_posts()를 위와 동일하게 get_header(); 부분과 합쳐버리면 된다.

그럼 여기서, 그 반대로 내 카테고리에서는 워드프레스 카테고리를 제외하고 싶다면?
워드프레스 Codex를 뒤지면 금방 방법이 나오지만 더 간단한건 플러그인을 활용하는 거다.
현재 내가 사용하고 있는 카테고리 플러그인은 특정카테고리만 제외하고 나오게 하는 게 쉽게 가능하다. 플러그인 위젯에서 워드프레스 카테고리만 언체크 해주면 끝.

어쨌든 이제 즐거운 블로깅 ㄱㄱ!

[WordPress] 워드프레스에 애드센스를 달자!! with PostLayout Plugin

#1

바야흐로 애드센스는 블로그의 꽃이다. 모든 사람들이 수표를 받는 모습을 꿈꾸며 애드센스를 달지만 돌아오는건 당신의 애드센스 계정이 블록되었습니다. 따위의 메시지일뿐. 그래 난 안될꺼야 아마.

거두절미하고,
워드프레스는 설치형 블로그 이다 보니,
애드센스를 달기가 애매하다.
검색해야 할 것도 많아.

나야 맨날 이거 뒤지니깐 안다고 쳐도, 처음 설치해본 사람이(더군다나 웹언어를 다뤄본적도 없다.)

  • 워드프레스의 포스트 하단에  애드센스를 설치하려면 single.php의 루프부분의
    마지막 부분 커맨트 템플릿 삽입절 전에 코드를 삽입하셔야 합니다.

라면 이건 조금 익숙한 사람이라 그래도 짜증날 판국이다.

#2

그래서 우리가 알아볼건 그런 거 하나없이 애드센스 설치하기.
이 포스트의 하단에 보면 애드센스가 보인다.

쉽다. PostLayout 플러그인과 함께라면.. 꼭 광고 같다만.
애드센스를 워드프레스레 설치하는 방법은 크게 4가지 단계로 이루어진다.

  1. 애드센스 가입
  2. 승인후 코드받기(여기까진 알아서들 해야겠지 당연히.)
  3. 워드프레스 플러그인 설치
  4. 위젯 사용

사실 위젯사용은 거의 모든 플러그인 사용에 동일하지만,
애드센스의 경우는 조금 다를 수 있다. 누구는 나처럼 포스트의 앞뒤에 붙이고 싶을 테고, 누구는 위젯에 달고 싶을테다.

나같은 경우는 전자. 포스트의 앞 또는 뒤 에 붙이고 싶은거다.
글을 읽고 “이 색히 괜찮은데? ” 싶으면 고마워서 애드센스를 콕콕 누를 수 있게 뒤에 붙이고 싶다 이거다.

#3

말이 길었다.
PostLayOut 플러그인 쉽게 말하면 포스트 전, 후로 원하는 코드를 자동으로 삽입해주는 플러그인이다. 사용자가 테마 자체를 수정을 할 필요가 없으므로 무척 편리하다.

설치는

[워드프레스 대쉬보드 – Plugin – Add New – postlayout 검색 -> Install -> Activate ]

혹은

Postlayout 플러그인 페이지 바로가기

순으로 진행하면 되겠다.

Activate후에 Settings 메뉴에 Post layout 메뉴가 생긴다.
클릭해보면 다음과 같은 화면이 보이겠다.(클릭하면 크게 보인다.)

영어가 많아서 어려워 보이지만,
크게 정리해보면

  1. 단일포스트의 앞, 뒤
  2. 페이지의 앞, 뒤
  3. 커맨트 입력창의 앞, 뒤
  4. 홈, 태그, 카테고리 페이지 앞, 뒤

에 특정 코드를 삽입할 수 있는거다.

또한 코드내에 자체 태그도 지원해준다.
다음 태그를 넣으면 실제 표시될때는 다른 텍스트로 대체가 된다는 말.

  • [title] – 포스트타이틀로 대체
  • [title_encoded] – 사용자의 URL 파라미터로 넘어온 문자인코딩으로 포스트 타이틀 대체 
  • [link] – 포스트 고유주소로 대체
  • [link_encoded] – 사용자의 URL 파라미터로 넘어온 문자인코딩으로 고유주소 대체 
  • [author_aim] – 주인장 aim주소로 대체 

나 같은 경우는 SinglePost –

 아이폰에서 화면

그렇다면 이제 당신이 할 일은 무엇인가?

단 하나다. 설치 후 나의 애드센스를 클릭해 주는거지.