3

ページ付けを使用して2つのループを作成しました(最初のループはCAT'Sカテゴリを介してループし、2番目のループはDOG'Sカテゴリを介してループします)が、スタックします:(

問題:サイト( CAT'Sカテゴリ)の[次のエントリ]をクリックすると、2番目に移動しますそのカテゴリのエントリですが、それは私のDOGのカテゴリの2番目のエントリにも適用されます(私はそれを望んでいません!!)。

私がやりたいのはこれです:CAT'Sカテゴリの[次のエントリ]をクリックすると、そのカテゴリ(CAT'S)の次の投稿にのみ移動し、 DOG'Sカテゴリの2番目の投稿には移動しません。私のDOG'Sカテゴリの「次のエントリ」。そのカテゴリ(DOG'S)の次の投稿にのみ移動し、私のCAT'Sカテゴリ の2番目の投稿には移動しません。誰かが私を助けてくれますか?しばらく前にwordpress.stackexchange.comで助けを求めました が、答えが得られなかったので、ここで質問しています。

インデックスphpは次のようになります。

<?php get_header(); ?>
<?php get_sidebar(); ?>
<div id="blog">         
    <?php         
    $args = array(
    'category_name' => 'cats' 
    );
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $the_query = new WP_query($args . '&paged=' . $paged . '&cat=-3');      
    while( $the_query -> have_posts()) : $the_query -> the_post();              
    ?>

    <div class="post">
    <div class="post_title">
    <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    </div>
        <div class="entry"> 
            <?php the_post_thumbnail(); ?>
            <?php the_content('Read on...'); ?>

            <p class="postmetadata">
            <?php _e('Filed under&#58;'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php  the_author(); ?><br />
            <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?> <?php edit_post_link('Edit', ' &#124; ', ''); ?>
            </p>
        </div>
    </div>

    <?php endwhile;?>
    <?php wp_reset_postdata();?>
    <div class="navigation">
    <div style="float:left;" class="alignleft"><?php previous_posts_link('&laquo; Previous Entries') ?></div>
    <div style="float:right;" class="alignright"><?php next_posts_link('Next Entries &raquo;',$the_query->max_num_pages) ?></div>
    </div>      
    </div>

    <div id="blogs">    
    <?php       
    $args = array(
    'category_name' => 'dogs' 
    );
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $the_query = new WP_query($args . '&paged=' . $paged . '&cat=-10');
    while( $the_query -> have_posts()) : $the_query -> the_post();              
    ?>

    <div class="post">
    <div class="post_title">
    <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    </div>
        <div class="entry"> 
            <?php the_post_thumbnail(); ?>
            <?php the_content('Read on...'); ?>

            <p class="postmetadata">
            <?php _e('Filed under&#58;'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php  the_author(); ?><br />
            <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?> <?php edit_post_link('Edit', ' &#124; ', ''); ?>
            </p>

        </div>
    </div>

    <?php endwhile;?>
    <?php wp_reset_postdata();?>
    <div class="navigation">
    <div style="float:left;" class="alignleft"><?php previous_posts_link('&laquo; Previous Entries') ?></div>
    <div style="float:right;" class="alignright"><?php next_posts_link('Next Entries &raquo;',$the_query->max_num_pages) ?></div>
    </div>
    </div>
   <?php get_footer(); ?>
4

4 に答える 4

2

2つの異なるページング値が必要なので、いくつかの新しい値を追加し、それらを検索するルールを書き直します(これらは、実際にはURLを見栄えよくするためだけのものです)。書き換えルールとページネーションリンク形式は、一方のカテゴリをページングできる一方で、もう一方のカテゴリページは変更されないことを意味します。

functions.php

function add_new_rules()
{
  // new 'paged' variables
  global $wp;
  $wp->add_query_var('paged_cats');
  $wp->add_query_var('paged_dogs');

  // rewrite rules
  add_rewrite_rule('page/cats/(\d+)/dogs/(\d+)', 'index.php?paged_cats=$matches[1]&paged_dogs=$matches[2]', 'top');
  add_rewrite_rule('page/cats/(\d+)/dogs/?$', 'index.php?paged_cats=$matches[1]&paged_dogs=1', 'top');

  if( !array_key_exists('page/cats/(\d+)/dogs/(\d+)', (array)get_option('rewrite_rules')) )
  {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
  }
}
add_filter('init', 'add_new_rules');

の新しいクエリ変数を確認し、index.php各WP_Queryおよび関連するページ付けリンクに使用します。

<div id="blog">
  <?php
  $paged_cats = (get_query_var('paged_cats')) ? get_query_var('paged_cats') : 1;
  $paged_dogs = (get_query_var('paged_dogs')) ? get_query_var('paged_dogs') : 1;

  $cats = new WP_query(array(
    'category_name' => 'cats',
    'paged' => $paged_cats,
    'posts_per_page' => 1
  ));
  while( $cats->have_posts() ) : $cats->the_post();
    ?>
    <div class="post">
      <div class="post_title">
        <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
      </div>
      <div class="entry">
        <?php the_post_thumbnail(); ?>
        <?php the_content('Read on...'); ?>
        <p class="postmetadata">
          <?php _e('Filed under&#58;'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php the_author(); ?><br />
          <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?> <?php edit_post_link('Edit', ' &#124; ', ''); ?>
        </p>
      </div>
    </div>
  <?php endwhile; ?>
  <?php wp_reset_postdata(); ?>
  <?php if ( $cats->max_num_pages > 1 ) : ?>
  <div class="navigation">
    <?php
    echo paginate_links(array(
      'base' => home_url("page/cats/%#%/dogs/{$paged_dogs}"),
      'format' => '%#%',
      'current' => $paged_cats,
      'total' => $cats->max_num_pages,
    ));
    ?>
  </div>
  <?php endif; ?>
</div>

  <hr>

<div id="blogs">
  <?php
  $dogs = new WP_query(array(
    'category_name' => 'dogs',
    'paged' => $paged_dogs,
    'posts_per_page' => 1
  ));
  while( $dogs->have_posts() ) : $dogs->the_post();
    ?>
    <div class="post">
      <div class="post_title">
        <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
      </div>
      <div class="entry">
        <?php the_post_thumbnail(); ?>
        <?php the_content('Read on...'); ?>
        <p class="postmetadata">
          <?php _e('Filed under&#58;'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php  the_author(); ?><br />
          <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?> <?php edit_post_link('Edit', ' &#124; ', ''); ?>
        </p>
      </div>
    </div>
  <?php endwhile;?>
  <?php wp_reset_postdata();?>
  <?php if ( $dogs->max_num_pages > 1 ) : ?>
  <div class="navigation">
    <?php
    echo paginate_links(array(
      'base' => home_url("page/cats/{$paged_cats}/dogs/%_%"),
      'format' => '%#%',
      'current' => $paged_dogs,
      'total' => $dogs->max_num_pages,
    ));
    ?>
  </div>
  <?php endif; ?>
</div>
于 2012-12-14T10:38:01.560 に答える
1

私はここで答えを見つけますhttps://wordpress.stackexchange.com/questions/47259/multiple-wp-query-loops-with-pagination、選択の答えは私と一緒に働いています。フォーマットを使用します。

<!-- Cats -->
<div class="animals">
    <?php
        $paged1 = isset( $_GET['paged1'] ) ? (int) $_GET['paged1'] : 1;
        $paged2 = isset( $_GET['paged2'] ) ? (int) $_GET['paged2'] : 1;

        // Custom Loop with Pagination 1
        // http://codex.wordpress.org/Class_Reference/WP_Query#Usage
        $args1 = array(
            'paged'          => $paged1,
            'posts_per_page' => 2,
        );
        $query1 = new WP_Query( $args1 );

        while ( $query1->have_posts() ) : $query1->the_post();
            the_title();
            echo '<br>';
            the_category(' ');
            the_excerpt();
            echo '<hr>';
        endwhile;

        // http://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters
        $pag_args1 = array(
            'format'  => '?paged1=%#%',
            'current' => $paged1,
            'total'   => $query1->max_num_pages,
            'add_args' => array( 'paged2' => $paged2 )
        );
        echo paginate_links( $pag_args1 );
    ?>
</div>

<!-- Dogs -->
<div class="animals">
    <?php
        // Custom Loop with Pagination 2
        $args2 = array(
            'paged'          => $paged2,
            'posts_per_page' => 2,
        );
        $query2 = new WP_Query( $args2 );

        while ( $query2->have_posts() ) : $query2->the_post();
            the_title();
            echo '<br>';
            the_category(' ');
            the_excerpt();
            echo '<hr>';
        endwhile;

        $pag_args2 = array(
            'format'  => '?paged2=%#%',
            'current' => $paged2,
            'total'   => $query2->max_num_pages,
            'add_args' => array( 'paged1' => $paged1 )
        );
        echo paginate_links( $pag_args2 );
    ?>
</div>

また、クリーンでないURLを生成しているため、SEOの目的でrel="nofollow"を追加できます。rel="nofollow"を追加する方法は次のとおりです。

于 2012-12-13T04:51:36.783 に答える
1

あなたの問題はこれです:ページネーションでwordpressは次の入力を取得するためにページIDまたはカウントを送信し、ポストバックに入る変数の名前は両方のリストで同じです。サーバーに移動すると、両方のリストは、post変数を確認して次のページに移動するように要求されます。

jho1086で言及されている解決策は、両方のリストのカスタム変数としてページングされた変数を作成し、それを割り当てることです。これにより、リストごとに異なる変数が送信され、必要に応じて次または前に移動できます。

ページ変数を追加することと、ページングに追加することの両方を行う必要があります。jho1086のソリューションでは、これを実現するために$args1と$pag_args1の両方が$paged2を参照していることを確認してください。

  • 猫用にページ2を選択すると、catpage=2がサーバーに送信されます。
  • ドキュメントにページ2を選択すると、dogpage=2がサーバーに送信されます。

ページ付けリンクについてこれを解決し、引数を渡すことができる場合は、次のようにすることができます

  • サーバーが猫のリストを取得したら、ページングパラメータとしてcatpageを使用します
  • サーバーが犬のリストを取得したら、ページングパラメータとしてdogpageを使用します

これは理論上であり、確実に機能します。firebugを介してリクエストに出入りする変数をテストし、他にどのような問題があるかを確認できますが、ループが2ページに進んで一方をクリックする理由は、両方のループが同じpost変数でページングしているためです。

于 2012-12-13T22:43:14.630 に答える
0

関数next_post_link()および previous_post_link()には、-という3番目の引数'in_same_cat'があります。これをTRUEに設定する必要があります。コーデックスのページを読んでください(答えの関数名をクリックしてください)。

コーデックスから:

<?php next_post_link('%link', 'Next post in category', TRUE); ?>

'excluded_categories' それらには、同じことを達成するため、または両方を組み合わせてさらに洗練された結果を得るためにも使用できる4番目の引数もあります。

于 2012-12-07T13:33:19.713 に答える