source

WP_Query는 일치하는 투고가 있을 때 0의 결과를 반환할 수 있습니다.왜요?

factcode 2023. 3. 20. 23:37
반응형

WP_Query는 일치하는 투고가 있을 때 0의 결과를 반환할 수 있습니다.왜요?

이거 때문에 난감해.

다음 루프가 포함된 category.php 파일이 있습니다.

<?php
if ( have_posts() ) : ?>
    <?php
    while ( have_posts() ) : the_post(); ?>
        <div class="entry-content description clearfix">
            <h2 class="category-subtitle"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <?php echo the_content(); ?>
            <?php global $withcomments; $withcomments = 1;
    ?>
        </div><!-- .entry-content -->
    <?php
    endwhile;
else :
    get_template_part( 'content', 'none' );
endif;
?>

이 코드 블록은 정상적으로 동작하며 항상 예상한 결과를 반환합니다.

또한 루프 외부에 (그 후에 중요한 경우) 이 루프와 함께 한쪽에 컬럼이 있습니다.이것을 뉴스 피드 루프라고 부릅니다.

<h3 class="newsfeed-heading"><a href="/category/news/">Latest News</a></h3>
<?php
    // wp_reset_query(); * Same results with or without wp_reset_query
    $args = array(
    'cat' => 89,
    'order'   => 'ASC'
    );
    $custom_query = new WP_Query($args);
    //echo "<h2>Found: $custom_query->found_posts</h2>";
    while($custom_query->have_posts()) : $custom_query->the_post();
?>
    <div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
        <h4 class="highlight1"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
        <p><?php $content = get_the_content(); echo mb_strimwidth($content, 0, 160, '...');?></p><div class="morelink"><a title="<?php the_title(); ?>" href="<?php the_permalink(); ?>">Read more</a></div>
    </div>
<?php endwhile; 
  // wp_reset_postdata();  * Same results with or without wp_reset_postdata
?>

대부분의 경우 이 2개의 루프가 잘 조합되어 양쪽 루프가 예상한 결과를 반환합니다.하지만 항상은 아니다.

내가 알기로는 메인 카테고리 루프에 하나의 결과만 포함되어 있다면 뉴스 피드 루프는 항상 정확합니다.그러나 메인 카테고리 루프에 결과 세트에 여러 개의 게시물이 있는 경우 뉴스 피드 루프가 제대로 작동하는 경우가 많습니다.그래서 패턴을 찾을 수 없었습니다.

퍼팅을 해봤습니다.wp_reset_query();서로 다른 장소에서 지푸라기라도 움켜쥐고 있지만 별 차이가 없어요

참고로 뉴스피드 루프가 작동하면 항상 올바른 결과 세트를 반환합니다.하지만 그렇지 않으면 항상 아무것도 반환되지 않고$custom_query->found_posts0을 반환합니다.

어디서 해결책을 찾아야 할지 조언해주시면 감사하겠습니다.

찾으시는 분들을 위해서found_posts 인수가 사용하는 경우 0을 반환합니다.'no_found_rows' => true.

네가 없어wp_reset_postdata();커스텀 쿼리 후.전화하자마자the_post(), 를 설정합니다.$post현재 게시물의 값에 대해 글로벌하게 설정합니다.이는 메인 쿼리와 모든 커스텀인스턴스에 해당됩니다.WP_Queryget_posts이 문제는 전화했을 때 발생합니다.setup_postdata().

이미 지적했듯이wp_reset_query()와 함께 사용됩니다.query_posts메인 쿼리 오브젝트 및 메인쿼리 오브젝트에 의존하는 오브젝트(관련 투고, 페이지 번호부여, 페이지 기능 등)가 파손되기 때문에 절대 사용하지 마십시오.

상기가 기능하지 않는 경우는, 다음의 어느쪽인가를 확인해 주세요.posts_**필터 또는 인스턴스pre_get_posts주제나 플러그인에 잘못 기재되어 있습니다.이러한 제안과는 별도로, 당신의 코드는 작동해야 합니다.

해결했습니다!

나는 그 문제가 암호에 있지 않다고 확신했고 더 빨리 이 문제를 해결했어야 했다.

이 문제는 ReOrder Post Within Categories https://wordpress.org/plugins/reorder-post-within-categories/ 라는 Wordpress 플러그인으로 인해 발생했습니다.

이 플러그인을 사용하면 대시보드의 끌어서 놓기 인터페이스를 통해 선택한 카테고리의 순서를 수동으로 변경할 수 있습니다.

이것이 커스텀 쿼리가 대부분의 시간 동안 작동한 이유를 설명해 줍니다.- 80개 이상의 카테고리 중 10개 정도만 수동으로 재주문되고 있습니다.물론 이러한 카테고리가 WP_Query와 경합하는 원인이 되고 있습니다.

저는 플러그인 해킹을 시작할 입장이 아니기 때문에 회피책은 플러그인을 해제하고 게시 날짜를 변경하여 게시물을 재정렬하는 것입니다.

이 질문에 답해 주신 기고자 여러분께 감사드립니다.

나도 비슷한 문제를 겪었었다.마지막으로 권장사항에 따라 삭제

'no_found_rows' => true,

근데 안 돼요.그래서 나는 쿼리 arg를 재배열했다.

'posts_per_page' => 10,

쿼리 args 끝에 있는 post_per_page는 "0"개의 found_posts가 됩니다.나중에 쿼리 arg의 맨 위로 이동하면 "100" found_post와 같은 실제 결과가 됩니다.

제가 직면한 문제는 쿼리가 개인 커스텀 투고 타입을 취득하고 있다는 것입니다.이렇게 하려면 로그인한 사용자가 게시물에 액세스하기 위해 올바른 권한을 가지고 있어야 합니다.따라서 올바른 역할을 가진 사용자를 사용하고 있는지, API를 사용할 때는 난스 키가 전달되는지 확인해야 합니다.

는 이 할 수 .wp_die();기능 호출이 종료되기 직전에 표시됩니다.

언급URL : https://stackoverflow.com/questions/31547473/wp-query-sometimes-returns-zero-results-when-there-are-matching-posts-why

반응형