2014-03-07 3 views
1

블로그의 아카이브 페이지에서 한 달을 클릭하면 해당 달 (분명히)을 작성한 모든 게시물을 보여주는 페이지로 이동합니다. 내 범주 중 하나의 게시물 만 표시하도록 해당 페이지를 필터링하는 방법이 있습니까?하나의 카테고리 (Wordpress)의 월간 아카이브 만 표시

archive.php

<?php if (have_posts()) : ?> 

    <div class="rightColumn"> 
     <?php 
       while (have_posts()) : the_post(); 
        get_template_part('content', get_post_format()); 
       endwhile; 
        // Previous/next page navigation. 
        twentyfourteen_paging_nav(); 
       else : 
        get_template_part('content', 'none'); 
       endif; 
      ?> 
    </div> 

<?php 
get_footer(); 

감사합니다.

답변

2

나는 나를 위해 일한 해결책을 찾아 냈다 :

function only_show_blog_posts($query) { 
    // Only modify the main loop query 
    // on the front end 
    if ($query->is_main_query() && ! is_admin()) { 
     // Only modify date-based archives 
     if (is_date()) { 
     // Only display posts from category ID 1 
     $query->set('cat', '12'); 
     } 
    } 
} 
add_action('pre_get_posts', 'only_show_blog_posts'); 
1

pre_get_posts 후크의 라인을 따라 뭔가 사용해보십시오 :

당신이 pre_get_posts 후크에 대한 자세한 정보를 찾을 수 있습니다 당신은 당신의 functions.php 파일에이 코드를 삭제할 수 있습니다

function filter_by_category($query) { 
    if ($query->is_archive() && $query->is_main_query() && basename($_SERVER['PHP_SELF']) == 'archive.php') { 
     $category_id = get_cat_ID('THE_CATEGORY_NAME'); //change to the actual name of the category you are filtering with 
     $query->set('cat', $category_id); 
    } 
} 
add_action('pre_get_posts', 'filter_by_category'); 

here

+0

이 코드를 가진 ONY 문제의 사이트 전체를 않습니다, 나는 내 다른 카테고리의 페이지에 갈 때 게시물을 표시하지 않습니다. Archive.php 페이지 만 타겟팅하는 방법이 있습니까? – Chris

+1

당신은'&& basename ($ _SERVER [ 'PHP_SELF']) == 'archive.php''를 if 문에 추가 할 수 있습니다. – zoranc

+0

어디서 코드를 정확히 추가해야합니까? – Chris

0

그 간단한 후크도 나를 도왔습니다. 좀 $ _GET에서 카테고리 ID를 얻을 수있는 기능을 수정 :

function only_show_blog_posts($query) { 
    if ($query->is_main_query() && ! is_admin()) { 
     $catId = (int)$_GET['catId']; 
     if (is_date() && is_int($catId)) 
     $query->set('cat', $catId); 
    } 
} 
관련 문제