2

私が持っているのは、カテゴリからの投稿を表示したページで、下部に前と次の投稿リンクがあります。私が抱えている問題は、最後の問題に到達したら、最初にループバックしたいということです。最初の投稿の場合は最後まで機能し、最後の投稿の場合は最初に戻るのではなく、最後の投稿の場合は最後の投稿を表示するだけです。

これまでの私のコードは次のとおりです。

<?php 
$prev_post = get_adjacent_post( true, '', true );
$next_post = get_adjacent_post( true, '', false );
$prev_post_id = $prev_post->ID;
$next_post_id = $next_post->ID;
?>

<?php if ($prev_post_id == '') {
$query = new WP_Query( array ( 'orderby' => 'ASC', 'posts_per_page' => '1', 'cat=4' ));

  while($query->have_posts()):
       $query->the_post();
       $prev_post_id = $query->post->ID;
  endwhile;
} ?>
<?php if ($next_post_id == '') {
  $query2 = new WP_Query( array ( 'orderby' => 'DESC', 'posts_per_page' => '1', 'cat=4'    ));
  while($query2->have_posts()):
       $query2->the_post();
       $next_post_id = $query2->post->ID;
  endwhile;
} ?>

<a href="<?php echo get_permalink($prev_post_id); ?>" class="prev-footer-item">
  <div class="prev-inner">
    <h3 class="gamma"><?php echo get_the_title($prev_post_id ); ?></h3>
    <h4 class="delta"><?php the_field('subtitle', $prev_post_id ); ?></h4>
    <div class="footer-overlay"></div>
  </div>
 </a>
<a href="<?php echo get_permalink($next_post_id); ?>" class="next-footer-item">
  <div class="next-inner">
    <h3 class="gamma"><?php echo get_the_title($next_post_id); ?></h3>
    <h4 class="delta"><?php the_field('subtitle', $next_post_id); ?></h4>
    <div class="footer-overlay"></div>
  </div>
</a>

私が見逃しているのは明らかなことだと思いますよね?

更新:作業前の投稿:

[request] => SELECT SQL_CALC_FOUND_ROWS  as1_posts.ID FROM as1_posts  WHERE 1=1  AND as1_posts.post_type = 'post' AND (as1_posts.post_status = 'publish' OR as1_posts.post_status = 'private')  ORDER BY as1_posts.post_date DESC LIMIT 0, 1

次の投稿が機能しない:

[request] => SELECT SQL_CALC_FOUND_ROWS  as1_posts.ID FROM as1_posts  WHERE 1=1  AND as1_posts.post_type = 'post' AND (as1_posts.post_status = 'publish' OR as1_posts.post_status = 'private')  ORDER BY as1_posts.post_date DESC LIMIT 0, 1
4

1 に答える 1

0

私に飛び出しているものは何も見えませんが、if(エラーを防ぐために) 両方のループにステートメントを追加し、各ループの後に追加し、 andの必要性をwp_reset_postdata()削除しました。これ以外にクエリ結果を使用したくない場合。$query$query2$query

別の考え-投稿IDが存在しない場合、確実get_adjacent_post()に返されますか? 、または''たとえば。実行して確認する価値があるかもしれません。null'0'var_dump($next_post_id)

編集

言い忘れていましたが、隣接する投稿の は、現在表示されている投稿と同じであるとget_adjacent_post()想定しています。post_typeあなたがすでに言ったように、これが問題になるとは思いませんが、それは将来のために心に留めておくべきことです.

<?php
if($prev_post_id === '') :

    $query = new WP_Query(array('orderby' => 'ASC', 'posts_per_page' => '1', 'cat=4'));

    if($query->have_posts()) : while($query->have_posts()) :
        $query->the_post();
        $prev_post_id = get_the_ID();
        endwhile;
    endif;

    wp_reset_postdata();

endif;

if($next_post_id === '') :

    $query = new WP_Query(array('orderby' => 'DESC', 'posts_per_page' => '1', 'cat=4'));

    if($query->have_posts()) : while($query->have_posts()) :
            $query->the_post();
            $next_post_id = get_the_ID();
        endwhile;
    endif;

    wp_reset_postdata();

endif;
?>
于 2012-11-22T11:42:48.273 に答える