2

基本的に「犬」と「猫」の2つの投稿タイプを設定しています。各ループの各投稿タイプから 2 つの最新の投稿を表示する 2 つの WP_Query ループを含むページ テンプレートがあります。以下は、投稿タイプを登録する方法です。

<?php
  function cat_post_type() { 
    register_post_type( 'cat',
      array('labels' => array(
        'name' => __('Cats', 'bonestheme'),
        'singular_name' => __('Cat', 'bonestheme'),
        'all_items' => __('All Cats', 'bonestheme'),
        'add_new' => __('Add New', 'bonestheme'),
        'add_new_item' => __('Add New Cat', 'bonestheme'),
        'edit' => __( 'Edit', 'bonestheme' ),
        'edit_item' => __('Edit Cats', 'bonestheme'),
        'new_item' => __('New Cat', 'bonestheme'),
        'view_item' => __('View Cat', 'bonestheme'),
        'search_items' => __('Search Cat', 'bonestheme'),
        'not_found' =>  __('Nothing found in the Database.', 'bonestheme'),
        'not_found_in_trash' => __('Nothing found in Trash', 'bonestheme'),
        'parent_item_colon' => ''
        ),
        'description' => __( 'This is the cat post type', 'bonestheme' ),
        'public' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => false,
        'show_ui' => true,
        'query_var' => true,
        'menu_position' => 8,
        'rewrite'  => array( 'slug' => 'cat', 'with_front' => false ),
        'has_archive' => 'cats',
        'capability_type' => 'post',
        'hierarchical' => false,
        'supports' => array( 'title', 'editor', 'thumbnail' )
       )
    );
  } 
  add_action( 'init', 'cat_post_type' );

  function dog_post_type() { 
    register_post_type( 'dog',
      array('labels' => array(
        'name' => __('Dogs', 'bonestheme'),
        'singular_name' => __('Dog', 'bonestheme'),
        'all_items' => __('All Dogs', 'bonestheme'),
        'add_new' => __('Add New', 'bonestheme'),
        'add_new_item' => __('Add New Dog', 'bonestheme'),
        'edit' => __( 'Edit', 'bonestheme' ),
        'edit_item' => __('Edit Dogs', 'bonestheme'),
        'new_item' => __('New Dog', 'bonestheme'),
        'view_item' => __('View Dog', 'bonestheme'),
        'search_items' => __('Search Dog', 'bonestheme'),
        'not_found' =>  __('Nothing found in the Database.', 'bonestheme'),
        'not_found_in_trash' => __('Nothing found in Trash', 'bonestheme'),
        'parent_item_colon' => ''
        ),
        'description' => __( 'This is the dog post type', 'bonestheme' ),
        'public' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => false,
        'show_ui' => true,
        'query_var' => true,
        'menu_position' => 8,
        'rewrite'  => array( 'slug' => 'dog', 'with_front' => false ),
        'has_archive' => 'dogs',
        'capability_type' => 'post',
        'hierarchical' => false,
        'supports' => array( 'title', 'editor', 'thumbnail' )
       )
    );
  } 
  add_action( 'init', 'dog_post_type' );
?>

以下は、投稿タイプを表示する方法です。

<?php
  $cat_query = new WP_Query(
    array(
      'posts_per_page' => 2,
      'post_type' => 'cat'
    )
  );
  if($cat_query->have_posts()) :
?>

  <div>
    <?php
      while($cat_query->have_posts()) :
      $cat_query->the_post();
    ?>
      <div>
        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
        </a>
      </div>
    <?php
      endwhile;
      wp_reset_postdata();
    ?>
  </div>

<?php endif; ?>

<?php
  $dog_query = new WP_Query(
    array(
      'posts_per_page' => 2,
      'post_type' => 'dog'
    )
  );
  if($dog_query->have_posts()) :
?>

  <div>
    <?php
      while($dog_query->have_posts()) :
      $dog_query->the_post();
    ?>
      <div>
        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
        </a>
      </div>
    <?php
      endwhile;
      wp_reset_postdata();
    ?>
  </div>

<?php endif; ?>

ここのように(ビデオを見る)、独自のページネーションと共存できるようにしたいのですが、カスタム投稿タイプではなく、通常のWP投稿でのみ機能するようです. これを達成する方法について誰かが何か考えを持っているなら、それは素晴らしいことです。

編集

次のコードでほぼ達成できましたが、バグがあります。たとえば、両方のページネーションで 3 ページ目に移動し、次に cat 投稿タイプのページネーションで 1 ページ目をクリックすると、同じ URL に移動します。

<?php
  $paged1 = isset( $_GET['paged1'] ) ? (int) $_GET['paged1'] : 1;
  $cat_query = new WP_Query(
    array(
      'posts_per_page' => 2,
      'post_type' => 'cat',
      'paged'  => $paged1
    )
  );
  if($cat_query->have_posts()) :
?>

  <div>
    <?php
      while($cat_query->have_posts()) :
      $cat_query->the_post();
    ?>
      <div>
        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
        </a>
      </div>
    <?php
      endwhile;
      echo paginate_links(
        array(
          'format'   => '?paged1=%#%',
          'current'  => $paged1,
          'total'    => $cat_query->max_num_pages,
          'add_args' => array( 'paged2' => $paged2 )
        )
      );
      wp_reset_postdata();
    ?>
  </div>

<?php endif; ?>

<?php
  $paged2 = isset( $_GET['paged2'] ) ? (int) $_GET['paged2'] : 1;
  $dog_query = new WP_Query(
    array(
      'posts_per_page' => 2,
      'post_type' => 'dog',
      'paged'  => $paged2
    )
  );
  if($dog_query->have_posts()) :
?>

  <div>
    <?php
      while($dog_query->have_posts()) :
      $dog_query->the_post();
    ?>
      <div>
        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
        </a>
      </div>
    <?php
      endwhile;
      echo paginate_links(
        array(
          'format'   => '?paged2=%#%',
          'current'  => $paged2,
          'total'    => $dog_query->max_num_pages,
          'add_args' => array( 'paged1' => $paged1 )
        )
      );
      wp_reset_postdata();
    ?>
  </div>

<?php endif; ?>
4

2 に答える 2

1

成功!$paged2定義される前に変数を呼び出そうとしていましたが、両方$paged1$paged2ループが開始される前に定義する必要があります。次のコードは最終ループです (テスト目的で、使用されている投稿タイプ名も変更しました)。

<?php
  $paged1 = isset( $_GET['paged1'] ) ? (int) $_GET['paged1'] : 1;
  $paged2 = isset( $_GET['paged2'] ) ? (int) $_GET['paged2'] : 1;
  $product_query = new WP_Query(
    array(
      'posts_per_page' => 1,
      'post_type' => 'product',
      'paged'  => $paged1
    )
  );
  if($product_query->have_posts()) :
?>

  <div>
    <?php
      while($product_query->have_posts()) :
      $product_query->the_post();
    ?>
      <div>
        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
        </a>
      </div>
    <?php
      endwhile;
      echo paginate_links(
        array(
          'format'   => '?paged1=%#%',
          'current'  => $paged1,
          'total'    => $product_query->max_num_pages,
          'add_args' => array( 'paged2' => $paged2 )
        )
      );
      wp_reset_postdata();
    ?>
  </div>

<?php endif; ?>

<?php
  $person_query = new WP_Query(
    array(
      'posts_per_page' => 1,
      'post_type' => 'person',
      'paged'  => $paged2
    )
  );
  if($person_query->have_posts()) :
?>

  <div>
    <?php
      while($person_query->have_posts()) :
      $person_query->the_post();
    ?>
      <div>
        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
        </a>
      </div>
    <?php
      endwhile;
      echo paginate_links(
        array(
          'format'   => '?paged2=%#%',
          'current'  => $paged2,
          'total'    => $person_query->max_num_pages,
          'add_args' => array( 'paged1' => $paged1 )
        )
      );
      wp_reset_postdata();
    ?>
  </div>

<?php endif; ?>
于 2013-08-09T23:46:09.133 に答える
0

カスタム投稿タイプでページネーションを実装する方法

<?php

  $paged1 = isset( $_GET['paged1'] ) ? (int) $_GET['paged1'] : 1;
  $cat_query = new WP_Query(
    array(
      'paged'          => $paged1,
      'posts_per_page' => 2,
      'post_type' => 'cat'
    )
  );
  if($cat_query->have_posts()) :
?>

  <div>
    <?php
      while($cat_query->have_posts()) :
      $cat_query->the_post();
    ?>
      <div>
        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
        </a>
      </div>
    <?php
      endwhile;

    ?>
  </div>

<?php endif; 
$pag_args1 = array(
    'format'   => '?paged1=%#%',
    'current'  => $paged1,
    'total'    => $cat_query->max_num_pages,
    'add_args' => array( 'paged1' => $paged1 )
);
echo paginate_links( $pag_args1 );
 wp_reset_postdata();
wp_reset_query(); 
?>
<?php
  $cat_query1 = new WP_Query(
    array(
      'paged'          => $paged1,
      'posts_per_page' => 2,
      'post_type' => 'dog'
    )
  );
  if($cat_query1->have_posts()) :
?>

  <div>
    <?php
      while($cat_query1->have_posts()) :
      $cat_query1->the_post();
    ?>
      <div>
        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
        </a>
      </div>
    <?php
      endwhile;

    ?>
  </div>

<?php endif; 

$pag_args2 = array(
    'format'   => '?paged1=%#%',
    'current'  => $paged1,
    'total'    => $cat_query1->max_num_pages,
    'add_args' => array( 'paged1' => $paged1 )
);
echo paginate_links( $pag_args2 );
wp_reset_postdata();
wp_reset_query(); 
?>

うまくいくことを願っています

編集

<?php
  $paged1 = isset( $_GET['paged1'] ) ? (int) $_GET['paged1'] : 1;
  $cat_query = new WP_Query(
    array(
      'posts_per_page' => 2,
      'post_type' => 'cat',
      'paged'  => $paged1
    )
  );
  if($cat_query->have_posts()) :
?>

  <div>
    <?php
      while($cat_query->have_posts()) :
      $cat_query->the_post();
    ?>
      <div>
        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
        </a>
      </div>
    <?php
      endwhile;
      echo paginate_links(
        array(
          'format'   => '?paged1=%#%',
          'current'  => $paged1,
          'total'    => $cat_query->max_num_pages,
          'add_args' => array( 'paged1' => $paged1 )
        )
      );
      wp_reset_postdata();
    ?>
  </div>

<?php endif; ?>

<?php
  $paged2 = isset( $_GET['paged2'] ) ? (int) $_GET['paged2'] : 1;
  $dog_query = new WP_Query(
    array(
      'posts_per_page' => 2,
      'post_type' => 'dog',
      'paged'  => $paged2
    )
  );
  if($dog_query->have_posts()) :
?>

  <div>
    <?php
      while($dog_query->have_posts()) :
      $dog_query->the_post();
    ?>
      <div>
        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
        </a>
      </div>
    <?php
      endwhile;
      echo paginate_links(
        array(
          'format'   => '?paged2=%#%',
          'current'  => $paged2,
          'total'    => $dog_query->max_num_pages,
          'add_args' => array( 'paged2' => $paged2 )
        )
      );
      wp_reset_postdata();
    ?>
  </div>

<?php endif; ?>
于 2013-08-09T21:44:32.280 に答える