WordPress 테마 개발에 익숙하지 않으며 PHP에 익숙하지 않습니다 (Java 및 C #에서 왔음). 이 사용자 정의 테마 에서 다음과 같은 상황 이 있습니다.
홈페이지에서 볼 수 있듯이 우선 추천 게시물 (특정 태그를 사용하여 구현했습니다 )이 포함 된 섹션 ( evidenza 라는 Articoli) 섹션을 표시 하고 그 아래 에는 최신 게시물이 포함 된 다른 영역 ( Ultimi Articoli )이 있습니다 해당 게시물이 아닙니다.
그것을하기 위해이 코드를 사용합니다 :
<section id="blog-posts">
<header class="header-sezione">
<h2>Articoli in evidenza</h2>
</header>
<!--<?php query_posts('tag=featured');?>-->
<?php
$featured = new WP_Query('tag=featured');
if ($featured->have_posts()) :
while ($featured->have_posts()) : $featured->the_post();
/*
* Include the post format-specific template for the content. If you want to
* use this in a child theme, then include a file called called content-___.php
* (where ___ is the post format) and that will be used instead.
*/
get_template_part('content', get_post_format());
endwhile;
wp_reset_postdata();
else :
// If no content, include the "No posts found" template.
get_template_part('content', 'none');
endif;
?>
<header class="header-sezione">
<h2>Ultimi Articoli</h2>
</header>
<?php
// get the term using the slug and the tag taxonomy
$term = get_term_by( 'slug', 'featured', 'post_tag' );
// pass the term_id to tag__not_in
query_posts( array( 'tag__not_in' => array ( $term->term_id )));
?>
<?php
if (have_posts()) :
// Start the Loop.
while (have_posts()) : the_post();
/*
* Include the post format-specific template for the content. If you want to
* use this in a child theme, then include a file called called content-___.php
* (where ___ is the post format) and that will be used instead.
*/
get_template_part('content', get_post_format());
endwhile;
else :
// If no content, include the "No posts found" template.
get_template_part('content', 'none');
endif;
?>
</section>
잘 작동하지만이 솔루션의 품질과 그것이 어떻게 작동하는지에 대해서는 의구심이 있습니다.
모든 주요 게시물 을 선택 하기 위해이 행을 사용 WP_Query
하여 특정 태그가있는 쿼리를 정의하는 새 객체를 만듭니다 featured
.
$featured = new WP_Query('tag=featured');
그런 다음 해당 have_posts()
방법을 사용하여이 쿼리 결과를 반복합니다 .
그래서 내가 이해 한 바에 따르면, 이것은 WordPress 기본 쿼리가 아니지만 내가 만든 새로운 쿼리입니다. 내가 이해 한 바에 따르면 (완료된대로) 새 쿼리를 작성하는 것이 좋으며 이러한 종류의 작업을 수행하려는 경우 기본 쿼리를 사용하지 않는 것이 좋습니다.
사실입니까, 아니면 뭔가 빠졌습니까? 그것이 사실이라면, 왜 새 사용자 정의 쿼리를 작성하고 Wordpress 기본 쿼리를 수정하지 않는 것이 더 좋은지 설명 할 수 있습니까?
알았어 '기능'태그가없는 모든 게시물을 표시합니다. 이를 위해이 코드 스 니펫을 사용합니다. 반대로이 코드 스 니펫은 기본 쿼리를 수정합니다.
<?php
// get the term using the slug and the tag taxonomy
$term = get_term_by( 'slug', 'featured', 'post_tag' );
// pass the term_id to tag__not_in
query_posts( array( 'tag__not_in' => array ( $term->term_id )));
?>
<?php
if (have_posts()) :
// Start the Loop.
while (have_posts()) : the_post();
get_template_part('content', get_post_format());
endwhile;
else :
// If no content, include the "No posts found" template.
get_template_part('content', 'none');
endif;
?>
제 생각에는 이것이 끔찍합니다. 사실인가요?
최신 정보:
동일한 작업을 수행하기 위해 functions.php에 추가 한이 기능 (아래 큰 답변에서)을 발견했습니다.
function exclude_featured_tag( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'tag__not_in', 'array(ID OF THE FEATURED TAG)' );
}
}
add_action( 'pre_get_posts', 'exclude_featured_tag' );
이 함수에는 쿼리 변수 객체가 생성 된 후 실제 쿼리가 실행되기 전에 호출되는 후크가 있습니다.
그래서 내가 이해 한 것에서 쿼리 객체를 입력 매개 변수로 가져 와서 특정 태그를 제외한 모든 게시물 (내 경우에는 featured
태그 게시물) 을 선택하여 수정 (실제로 필터링)합니다.
따라서이 기능과 함께 이전 쿼리 (추천 게시물을 표시하는 데 사용 된 쿼리)를 사용하여 테마에 표시되지 않은 게시물 만 표시하려면 어떻게해야합니까? 아니면 새 검색어를 만들어야합니까?