연도 별 월별 맞춤 게시물 유형 자료실?


답변:


17

그래 넌 할수있어. 필요한 것은 필터를 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>';

3
이 솔루션을 사용해 보셨습니까? CPT의 게시물과 게시물 수와 함께 월 목록을 올바르게 가져 오지만 링크는 쓸모가 없습니다. 클릭하면 CPT가 아닌 전체 사이트의 월로 이동합니다.
jerclarke

약간의 파기 (아래 Tom Nowell의 답변 참조) 후 맞춤 게시물 유형에 대한 월별 아카이브를 포기했습니다. 대신 게시물 카테고리를 사용하고 영구 링크 구조를로 변경했습니다 /%category%/%year%/%monthnum%/%postname%/. 그런 다음 위와 비슷한 후크를 사용 /%category%/하여 날짜 대신 시작하도록 링크를 수정할 수 있습니다.
Kevin C.

이것에 대한 질문. 이렇게하면 URL이 생성 mysite.com/2013/04되지만 404로 이어집니다. 사용자 정의 게시물 유형은 다음 위치에서 사용할 수 있습니다. 링크가 있어야 mysite.com/cats한다고 생각 mysite.com/cats/2013/04하지만 404로도 해결됩니다. 아카이브 링크가 어떻게 작동합니까?
gaoshan88

2
더 좋은 점은 WordPress에서 누락 된 기능을 처리하는 플러그인이 마침내 있다는 것입니다. 핵심 문제가 핵심 문제를 해결하려는 핵심 기고자가 작성했습니다. 플러그인은 핵심에서 문제가 제대로 해결 될 때까지 안내해줍니다. wordpress.org/plugins/archives-custom-post-posts 유형
Trevor

6

Wordpress 개발자의 공식적인 내용은 사용자 정의 게시물 유형이 일반 일반 게시물의 작업을 수행하기위한 것이 아니며 날짜 등의 게시물 아카이브가 필요한 경우 올바르게 작동하지 않는다는 것입니다. 게시 형식 등을 사용하는 것이 좋습니다.

사용자 정의 게시물 유형은 웹 응용 프로그램 등을 대상으로하는 반면 같은 기능을 가진 블로그와 뉴스 등 다른 이름으로 보조 또는 병렬 블로그 역할을하는 사용자 정의 게시물 유형 설정과 같은 작업은 기능이 아닙니다. 구현에서 발생하는 다른 기술적 문제를 의미합니다.

그래도이 정책에 동의하지 않고 단순히 사용자 정의 분류법과 게시물 형식을 사용하는 것만으로는 충분하지 않은 경우 functions.php에 다시 쓰기 규칙을 추가하고 특정 URL의 연도 / 월 아카이브를 포스트 아카이브 페이지로 리디렉션 한 다음 사용자 정의를 확인할 수 있습니다 다시 쓰기 규칙에 변수를 지정한 후 다른 템플릿을로드하여 다시 쓰기 규칙에서 적절한 값을 설정했는지 확인하십시오.


그들이이 기능만으로는 지금까지가는 것이 조금 이상해 보인다. 맞춤 게시물을 어떻게 사용하는지 예를 들어 주시겠습니까?
Dan Lee

맞춤 게시물은 페이지 및 블로그 게시물 (또는 다른 이름의 블로그 게시물이나 기사 / 뉴스 / 일기 등)의 범위에 포함되지 않는 모든 항목에 사용해야합니다. 맞춤 게시물의 올바른 사용 예는 다음과 같습니다. : 이벤트, 메뉴, 위치, 양식, 로그 등
Tom J Nowell

사용자 정의 게시물은 기본적으로 웹 앱을 생성하는 수단으로, 백엔드에서 게시물 메뉴를 복제하여보다 쉽게 ​​편집 할 수있는 수단이 아닙니다 (이러한 사용은 워드 프레스 속도를 훨씬 느리게하고 실제보다 더 많은 작업을 수행합니다)
Tom J Nowell

1
어우. 이것은 비극적으로 질문에 대한 정답입니다. 위의 설명은 "CPT의 날짜 URL이 없어야 함"을 기반으로한다고 믿을 수는 없지만 실제로 CPT의 날짜 URL이 너무 복잡하여 실제로 구현하지 않기로 결정한 것은 거의 확실합니다. 분명히 사람들이 사용자 정의 게시물 유형에 대한 날짜 아카이브를 원할 경우 게시물 형식을 지적하여 명백한 욕망을 사라지게 할 수는 없습니다.
jerclarke

1
나는 매우 동의하지 않아야한다. 사용자 정의 게시물 유형은 Codex에서 "웹 앱"이라고 말하는 곳이 아니라 원하는 용도로 사용됩니다. 또한 자체 맞춤 분류법이있는 "뉴스"섹션이 필요할 수 있으며 해당 아카이브를 원할 것입니다. 또는 제안 된 "이벤트"유형도 CPT에 완벽하게 사용된다는 데 동의하지만 날짜 기반 아카이브가 필요할 수도 있습니다.
Trevor

5

편집 -이 대답은 여전히 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하므로 수락하는 일반 인수를 사용할 수 있습니다. 그러나 사용자 지정 게시물 유형 이름 인수를 추가 할 수있는 기능이 추가되었습니다.


2

이것을 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);

1

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'));

그의 첫 번째 대답을 참조하십시오. 질문에 답변 할 때의 팁, 코드를 추가하거나 해당 링크에 대한 링크 만하지 마십시오. 코드가 작동 할 수 있지만 코드의 기능과 작동 이유를 항상 아는 것이 좋습니다. 그렇지 않으면 당신의 대답은 잘 포맷됩니다. 이를 위해 +1
Pieter Goosen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.