답변:
그래 넌 할수있어. 필요한 것은 필터를 wp_get_archives();
만들어서 post_type
매개 변수를 허용하는 것입니다 .
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
$where = "WHERE post_type = '$post_type' AND post_status = 'publish'";
return $where;
}
그런 다음 이것을 호출하십시오.
add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);
사용자 정의 게시물 유형으로 아카이브를 표시하려면 post_type 인수를 전달하십시오.
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
/%category%/%year%/%monthnum%/%postname%/
. 그런 다음 위와 비슷한 후크를 사용 /%category%/
하여 날짜 대신 시작하도록 링크를 수정할 수 있습니다.
mysite.com/2013/04
되지만 404로 이어집니다. 사용자 정의 게시물 유형은 다음 위치에서 사용할 수 있습니다. 링크가 있어야 mysite.com/cats
한다고 생각 mysite.com/cats/2013/04
하지만 404로도 해결됩니다. 아카이브 링크가 어떻게 작동합니까?
Wordpress 개발자의 공식적인 내용은 사용자 정의 게시물 유형이 일반 일반 게시물의 작업을 수행하기위한 것이 아니며 날짜 등의 게시물 아카이브가 필요한 경우 올바르게 작동하지 않는다는 것입니다. 게시 형식 등을 사용하는 것이 좋습니다.
사용자 정의 게시물 유형은 웹 응용 프로그램 등을 대상으로하는 반면 같은 기능을 가진 블로그와 뉴스 등 다른 이름으로 보조 또는 병렬 블로그 역할을하는 사용자 정의 게시물 유형 설정과 같은 작업은 기능이 아닙니다. 구현에서 발생하는 다른 기술적 문제를 의미합니다.
그래도이 정책에 동의하지 않고 단순히 사용자 정의 분류법과 게시물 형식을 사용하는 것만으로는 충분하지 않은 경우 functions.php에 다시 쓰기 규칙을 추가하고 특정 URL의 연도 / 월 아카이브를 포스트 아카이브 페이지로 리디렉션 한 다음 사용자 정의를 확인할 수 있습니다 다시 쓰기 규칙에 변수를 지정한 후 다른 템플릿을로드하여 다시 쓰기 규칙에서 적절한 값을 설정했는지 확인하십시오.
편집 -이 대답은 여전히 WP4.4 <작동하면서> 사용자 정의 포스트 유형 4.4 지원은 지금에 포함되어 있기 때문에wp_get_archives()
마지막으로 워드 프레스에 사용자 정의 포스트 유형의 날짜 기반 아카이브를위한 간단하고 빠르고 쉬운 솔루션이 있습니다! 이것은 WP Core Trac에 기록 된 오랜 문제 였습니다.
그것은 아직 해결되어야하지만, Trac에의 기여 중 하나는 게시 한 GitHub의 간단한 플러그인 이 CPTS에 대한 날짜 기반의 아카이브를 가질 수있게된다.
이 플러그인을 설치하거나 함수 코드를 수동으로 추가 한 후 다음과 같이 CPT 용 아카이브를 사용합니다.
<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>
이 새로운 함수 wp_get_archives_cpt
는 표준과 동일하게 작동 wp_get_archives
하므로 수락하는 일반 인수를 사용할 수 있습니다. 그러나 사용자 지정 게시물 유형 이름 인수를 추가 할 수있는 기능이 추가되었습니다.
이것을 taiken의 답변에 추가 할만 큼 평판이 충분하지 않습니다. 죄송합니다.
그러나 그의 대답이 저에게 효과적이라고 덧붙이고 싶었지만 링크는 'localhost / date / 2010'형식이었습니다. 반면 'localhost / postslug / 2010'형식이 필요했습니다. wp_get_archives 출력에서 문자열 바꾸기를 사용하여이 문제를 해결할 수있었습니다.
따라서 퍼머 링크 설정 방법에 따라이 코드는 404 문제를 해결하고 링크를 사용자 지정 게시물 유형 퍼머 링크 구조로 리디렉션합니다.
$yearly_archive = wp_get_archives(array( 'type' => 'yearly', 'post_type' => '<your post type name>', 'echo' => '0') );
$blog_url = get_bloginfo('url');
echo str_replace(($blog_url . '/date'), ($blog_url . '<your post type slug>'),$yearly_archive);
takien의 게시물에 추가 할 수 없으므로 여기에 내가해야 할 일이 있습니다.
functions.php
add_action('init', 'my_year_archive_rewrites');
function my_year_archive_rewrites() {
add_rewrite_rule('resource/news/([0-9]{4})/page/?([0-9]{1,})/?', 'index.php?post_type=news&year=$matches[1]&paged=$matches[2]', 'top');
add_rewrite_rule('resource/news/([0-9]{4})/?', 'index.php?post_type=news&year=$matches[1]', 'top');
}
add_filter('getarchives_where', 'my_custom_post_type_archive_where', 10, 2);
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
return "WHERE post_type = '$post_type' AND post_status = 'publish'";
}
add_filter('year_link', 'my_year_link');
function my_year_link($link) {
global $wp_rewrite;
if(true) { // however you determine what archive you want
$link = str_replace($wp_rewrite->front, '/resource/news/', $link);
}
return $link;
}
) (wp_get_archives를 호출
wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));