Пагинация пользовательских типов записей в Wordpress

Я пытаюсь настроить разбиение на страницы с помощью плагина wp pagenavi и настраиваемого типа публикации (страницы портфолио) в WordPress, и мне не повезло.

Вот урезанная версия страницы моего портфолио:

<?php get_header(); ?>

<?php
  $type = 'portfolio';
  $args=array(
    'post_type' => $type,
    'post_status' => 'publish',
    'paged' => $paged,
    'posts_per_page' => 1,
    'caller_get_posts'=> 1
  );
  $temp = $wp_query;  // assign original query to temp variable for later use   
  $wp_query = null;
  $wp_query = new WP_Query($args); 
?>

<?php if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post(); ?>
...
<?php endwhile; else : ?>
...
<?php endif; ?>

<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
    $wp_query = null; $wp_query = $temp; ?>

<?php get_footer(); ?>

У меня установлены постоянные ссылки:

/%postname%/

и я восстановил их.

Когда я дошел до второй страницы своего портфолио, я получил страницу 404. Есть идеи, почему это происходит?

Спасибо за помощь.


person Joe    schedule 24.07.2010    source источник
comment
Это было решено здесь, если кто-то еще столкнется с той же проблемой: wordpress.org / support / topic / 429149? answers = 1 # post-1616810   -  person Joe    schedule 27.07.2010
comment
Почему бы не сделать этот ответ и не пометить его как принятый?   -  person Kev    schedule 23.07.2011


Ответы (4)


Я думаю, что у вас плохой случай перенаправления старого URL-адреса WordPress.

Попробуйте добавить этот фильтр, чтобы остановить его:

add_filter('redirect_canonical','my_disable_redirect_canonical');

function my_disable_redirect_canonical( $redirect_url ) {
    if ( is_single( 'portfolio' ) )
    $redirect_url = false;
    return $redirect_url;
}
person Malte Schulze-Boeing    schedule 04.09.2013
comment
Однако во многих случаях точная строка должна быть такой: if (get_post_type ($ post) == 'портфолио' && is_archive ()) $ redirect_url = false; - person Imperative; 06.05.2014

Цифровая разбивка на страницы пользовательского типа сообщения -> http://designphiliconline.blogspot.in/2012/08/wordpress-custom-post-type-pagination.html

Это будет работать с постоянной ссылкой по умолчанию или с именем сообщения.

person Aditya Rao    schedule 10.08.2012
comment
Кратко опишите сообщение, на которое вы ссылаетесь; просто предоставление ссылки бесполезно. - person LittleBobbyTables - Au Revoir; 29.09.2012

У меня была проблема с разбивкой на страницы в Wordpress, и я не мог ее исправить, поэтому я свернул собственное расширение класса WP_Query -> MF_Query

Просто используйте MF_Query вместо WP_Query, а затем используйте $your_query->next("Next Page") или $your_query->prev("Previous Page"), чтобы добавить следующую и предыдущую ссылки (текст имеет значения по умолчанию, поэтому аргументы не требуются.

Требуется, чтобы вы передавали свои аргументы непосредственно в инициализацию класса в виде массива, в отличие от различных опций, которые есть у вас со стандартным WP_Query.

Это немного взломано, но работает !!

person Mild Fuzz    schedule 23.09.2011

Это способ, которым я передаю выгружаемую переменную в запрос CPT для навигации, вы можете использовать разные методы для этого, но это единственный, который у меня работает с использованием WP_QUERY. И не нужно никаких плагинов для навигации, только стандартные навигационные ссылки.

Вы должны разместить эту строку здесь перед WP_QUERY

 $paged = 1;  
 if ( get_query_var('paged') ) $paged = get_query_var('paged');  
 if ( get_query_var('page') ) $paged = get_query_var('page');

$temp = $wp_query; 
                $wp_query = null; 
                $wp_query = new WP_Query(); 
                $wp_query->query('post_type=portafolio&showposts=7&orderby=post_date&order=DESC&paged='.$paged); 
 while ($wp_query->have_posts()) : $wp_query->the_post(); 

 //post format
get_template_part("content");?>

  <?php endwhile; ?>

  //pagination links here

  <?php 
      $wp_query = null; 
      $wp_query = $temp;  // Reset
   ?>

После того, как вы измените свой файл цикла, добавьте его в свой functions.php, это переменная, которая будет обрабатывать страницу, на которой вы находитесь.

 function paginate() {  
   global $wp_query, $wp_rewrite;  
   $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;  

   $pagination = array(  
    'base' => @add_query_arg('page','%#%'),  
    'format' => '',  
    'total' => $wp_query->max_num_pages,  
    'current' => $current,  
    'show_all' => true,  
    'type' => 'plain'  
    );  

  if ( $wp_rewrite->using_permalinks() ) $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );  
if ( !empty($wp_query->query_vars['s']) ) $pagination['add_args'] = array( 's' =>   get_query_var( 's' ) );  
echo paginate_links( $pagination );  
}  

 function portafolio_posts_per_page( $query ) {  
    if ( $query->query_vars['post_type'] == 'portafolio' ) $query->query_vars['posts_per_page'] = 10;  
return $query;  
}  
 if ( !is_admin() ) add_filter( 'pre_get_posts', 'portafolio_posts_per_page' );     

Вы также можете прочитать этот пост, в котором объясняется метод объединения шаблонов, это устранит проблему разбиения на страницы, с которой мы сталкиваемся, когда речь идет о пользовательских запросах.

http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

person Carlos E. Guillen    schedule 28.01.2014