사용자 정의 게시물 유형 아카이브를 첫 페이지로 사용하는 방법은 무엇입니까?


16

맞춤 게시물 형식 보관을 사이트의 첫 페이지로 사용하고 싶습니다.

 http://the_site.com/

archive-{post-type}.php파일 에 따라 표시되는 사용자 정의 게시물 유형 아카이브 입니다.

이상적으로는 사용하여 쿼리 변경하고 싶은 is_front_page()내에서 functions.php파일을. 첫 페이지로 "홈"이라는 페이지를 사용하여 다음을 시도했습니다.

 add_filter('pre_get_posts', 'my_get_posts');
 function my_get_posts($query){
     global $wp_the_query;
     if(is_front_page()&&$wp_the_query===$query){
        $query->set('post_type','album');
        $query->set('posts_per_page',-1);
     }
     return $query;
 }

그러나 첫 페이지는 "홈"의 내용을 반환하고 있으며 사용자 정의 쿼리를 무시하는 것 같습니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까? 일반적으로 이것에 대해 더 좋은 방법이 있습니까?


is_front_page ()는 pre_get_posts와 작동하지 않습니다
Brad Dalton

답변:


27

정적 페이지를 홈페이지로 설정 한 후이 페이지를 귀하의 페이지에 추가 할 수 있습니다 functions.php. archive-POSTTYPE.php템플릿도 올바르게 호출합니다 .

add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query){
    //Ensure this filter isn't applied to the admin area
    if(is_admin()) {
        return;
    }

    if($wp_query->get('page_id') == get_option('page_on_front')):

        $wp_query->set('post_type', 'CUSTOM POST TYPE NAME HERE');
        $wp_query->set('page_id', ''); //Empty

        //Set properties that describe the page to reflect that
        //we aren't really displaying a static page
        $wp_query->is_page = 0;
        $wp_query->is_singular = 0;
        $wp_query->is_post_type_archive = 1;
        $wp_query->is_archive = 1;

    endif;

}

이 기능 if(is_admin()) return;은 맨 처음에 필요합니다 . 그렇지 않으면 관리 영역이 엉망입니다.
brasofilo

1
이것이 나를 위해 일하는 동안 결과적으로 기본 및 보조 메뉴가 사라졌습니다.
super9 April

거의 정확합니다. 이 코드는 모든 wp_queries를 변경하므로 if ($ wp_query-> get .....) 대신 if (is_home ())
Leo Caseiro 2016 년

프론트 페이지 대신 동일하지만 내 사용자 정의 페이지 템플릿을 사용하고 있으며 사용자 정의 게시물이 추가되지 않은 것처럼 결과가 표시되지 않습니다. 이견있는 사람?
trainoasis

이 솔루션은 페이징을 지원하지 않습니다. / page / 2 URL은 여전히 ​​처음 10 개의 게시물을 표시합니다.
rg89

6

CPT 아카이브 이름을 home.php로 바꾸십시오.

그런 다음 pre_get_posts를 사용하여 CPT 만 표시하도록 홈페이지 쿼리를 변경하십시오.

function wpsites_home_page_cpt_filter($query) {
if ( !is_admin() && $query->is_main_query() && is_home() ) {
$query->set('post_type', array( 'your-cpt' ) );
    }
  }

add_action('pre_get_posts','wpsites_home_page_cpt_filter');

cpt를 맞춤 게시물 유형의 이름으로 바꿉니다.


2
마지막으로 명확하고 실행 가능한 설명!
Jack

1

ljaas 답변에 감사드립니다. 저는이 정확한 문제를 해결하고자했습니다. 사용자 정의 게시물 유형 아카이브 템플릿을 호출하려면 다음 조건을 추가해야했습니다.

$wp_query->is_post_type_archive = 1;
$wp_query->is_archive = 1;

2
안녕하세요, WPSE에 오신 것을 환영합니다. "답변"은 초기 질문에 답하기위한 것입니다 (스택 교환 사이트는 스레드 토론 포럼아닙니다 ). 이것은 주석에 훨씬 더 적합합니다 .
Johannes Pille

설명을 Johannes 감사합니다. '댓글 추가'기능이 없어서 답변에 댓글을 달 수있는 방법을 알 수는 없었지만 그렇게 생각했습니다. 이것은 시간에 민감한 기능입니까, 아니면 장님입니까?
Eli

0

설정> 읽기> 첫 페이지 표시에서 블로그 게시물과 정적 페이지를 모두 재정의하는 것이 좋습니다.

<?php
/**
 * Set custom post type archive as front page.
 *
 * @since 1.0.0
 */
function ql_set_as_front_page( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }
    if ( ql_is_front_page( $query ) ) {
        $query->set( 'page_id', '' );
        $query->is_page = false;
        $query->is_singular = false;
        $query->set( 'post_type', 'MYCPT' );
        $query->is_archive = true;
        $query->is_post_type_archive = true;
    }
}
add_action( 'pre_get_posts', 'ql_set_as_front_page' );

/**
 * Taken from WP_Query::is_front_page and adapted to compare page_on_front with current page ID.
 * 
 * @since 1.0.0
 * 
 * @param object $query The main WP Query.
 */
function ql_is_front_page( $query ) {
    if ( 'posts' == get_option( 'show_on_front') && $query->is_home() )
        return true;
    elseif ( 'page' == get_option( 'show_on_front') && get_option( 'page_on_front' ) && $query->get('page_id') == get_option( 'page_on_front' ) )
        return true;
    else
        return false;
}

나는 필터를 사용하여 템플릿 재정와 함께 그것을 사용하고 있습니다 front_page_templatehome_template사용자 지정 서식을 반환 할 수 있습니다.


0

나를 위해 페이지 매김을 끊습니다. 홈 페이지로 색인 또는 정적 페이지를 선택하면 페이지 매김 링크가 표시되지만 2 페이지를 클릭하면 다음과 같이 표시됩니다.

  • 색인 페이지 (기본값)의 경우 : 404 페이지
  • 정적 페이지의 경우 : 페이지 1과 동일한 결과 : "페이지 된"인수가 포스트 유형 목록 페이지 매김이 아니라 페이지 유형 페이지 매김을 표시하도록 해석됩니다.

페이징 된 인수를 포착하고 올바르게 전달하려면 다시 쓰기 규칙이 필요하다고 생각합니다.

어쨌든 사용자 지정 템플릿 페이지는 몇 가지 추가 다시 쓰기 규칙이있는 솔루션이어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.