programing

new Wp_Query() 또는 pre_get_posts()를 사용자 지정 게시물 유형에 대한 모든 게시물을 볼 수 있습니까?

powerit 2023. 9. 15. 21:26
반응형

new Wp_Query() 또는 pre_get_posts()를 사용자 지정 게시물 유형에 대한 모든 게시물을 볼 수 있습니까?

사용자 지정 게시물 유형 담당자(archive-personnel.php라고 함)의 모든 게시물을 보여주는 아카이브 템플릿 파일이 있습니다.

이게 파일의 시작이고...

<?php 
get_header(); 

//Show all posts for this custom posttype (personnel)
$args = array( 'post_type' => 'personnel', 'posts_per_page' => -1 );
$personnel_query = new WP_Query( $args );
if (have_posts()) : while ($personnel_query->have_posts()) : $personnel_query->the_post(); 

이게 효과는 있지만, 제가 사용할 수 있는 건 알고 있습니다.pre_get_posts()뿐만 아니라.근데.pre_get_posts()- 필터는 관리자 등에게 영향을 주는지 확인해야 합니다.

그래서 제 질문은: 제가 어떤 대안을 사용하는 것이 정말로 중요한가요 아니면 단지 선호/취향의 문제인가요?

쿼리 대 보조 쿼리:

제가 어떤 대안을 사용하는 것이 정말 중요한가요, 아니면 단지 선호/취향의 문제인가요?

네, 정말 차이가 있습니다.

1)pre_get_posts는 WP_Query를 사용하여 기본 쿼리(또는 모든 쿼리)를 수정하는 것과 보조 쿼리를 추가하는 것입니다.

2)페이징이 보조 쿼리에서 작동하려면 일반적으로 기본 쿼리를 수정해야 합니다.

를 사용하여pre_get_posts후크 당신은 모든 쿼리를 수정할 수 있습니다.WP_Query(), 메인 쿼리를 포함합니다. 이는 예입니다.WP_Query()모든 페이지 요청에 대해 존재합니다.

그 것을 기억하라.get_posts()의 포장지입니다.WP_Query()필터가 활성화되어 있을 때,suppress_filters특성이 다음과 같이 설정됩니다.FALSE.

사용시pre_get_posts일반적으로 조건부 태그를 사용하여 특정 쿼리를 대상으로 삼기를 원합니다.다음과 같은 몇 가지 예를 사용할 수 있습니다.

a) 현재is_main_query() 쿼리가 주 쿼리인지 확인합니다.

b) 백엔드에서 쿼리를 수정하지 않도록 합니다! is_admin().

c) 포스트is_post_type_archive() 타입 아카이브를 대상으로 합니다.

사용자 정의를 추가할 때WP_Query(), 그러면 기본 쿼리 외에 추가 쿼리를 추가하는 것입니다.

저는 보통.pre_get_posts보조 쿼리를 추가하는 대신 가능한 경우 작업을 수행합니다.

예:

기본 쿼리를 수정하려면 사용자 지정 게시물 유형의 아카이브에 대해personnel, 시도해 볼 수 있습니다.

add_action( 'pre_get_posts', function( $query ){
  if ( ! is_admin() && $query->is_main_query() ) {
    if ( is_post_type_archive( 'personnel' ) ) {
      $query->set('posts_per_page', -1 );
    }
  }
});

이것은 검증되지 않았지만 당신은 알 것입니다 ;-)

추가 읽기:

다음 링크를 통해 차이점에 대한 더 많은 정보를 얻을 수 있기를 바랍니다.

언급URL : https://stackoverflow.com/questions/21303743/new-wp-query-or-pre-get-posts-to-view-all-posts-for-custom-post-type

반응형