2011-02-09 21 views
6

Эй. Я использую пользовательский тип сообщения в wordpress. Зарегистрировать этот таможенный пост типа, как это:Wordpress пользовательских типа сообщения категории

 register_post_type("lifestream", array(
      'label' => 'Lifestream', 
      'public' => true, 
      'hierarchical' => true, 
      'menu_position' => 5, 
      'supports' => array('title','editor','author','thumbnail','comments','custom-fields'), 
      'taxonomies' => array('category','post_tag'), 
      'query_var' => true, 
      'publicly_queryable' => true, 
      'exclude_from_search' => false, 
      'caller_get_posts' => 1 

     )); 
     register_taxonomy_for_object_type('category', 'lifestream'); 
     register_taxonomy_for_object_type('post_tag', 'lifestream'); 

В теме (шаблон цикла) мне нравится совмещать посты и мой пользовательские почтовый тип, для этого я использую query_posts() с этими параметрами:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$args = array(
    'post_type' => array('post', 'lifestream'), 
    'paged' => $paged, 
    'cat' => $wp_query->get('cat'), 
    'tag' => $wp_query->get('tag'), 
    'year' => $wp_query->get('year'), 
    'monthnum' => $wp_query->get('monthnum'), 
    'post_status' => 'publish', 
    'showposts' => 3 
); 
query_posts($args); 


# the loop  
while (have_posts()) : the_post(); 
# markup 
endwhile; 


if($wp_query->max_num_pages > 1): 
# next_posts_link/previous_posts_link 
endif; 

wp_reset_query(); 

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

И, если я вызываю URL с постраничным адресом, например./category/mycat/page/2 a 404. Но определенно должны быть должности. Независимо от того, есть ли в категории персонализированные сообщения или нормальные должности. Я полагаю, что мои параметры для query_posts() не корректны, но не знаю ...

Похоже, что $ wp_query-> max_num_pages имеет неправильное значение. Но почему? Я правильно регистрирую таксономии (я люблю использовать категории и теги для своих пользовательских типов сообщений)?

У вас есть идея, что делать? Большое спасибо!

ответ

2

Я только что столкнулись точно та же проблема и не могла найти решение нигде! Интернеты полны ресурсов по теме, но никто не дал правильного ответа на этот вопрос.

Вот правильный ответ для любого, кто ищет. Поместите приведенный ниже код в functions.php в корневой каталог вашей темы.

function init_category($request) { 
    $vars = $request->query_vars; 
    if (is_category() && !is_category('Blog') && !array_key_exists('post_type', $vars)) : 
     $vars = array_merge(
      $vars, 
      array('post_type' => 'any') 
     ); 
     $request->query_vars = $vars; 
    endif; 
    return $request; 
} 
add_filter('pre_get_posts', 'init_category'); 

Все кредиты идут на Mike, который разместил это на Wordpress.com. Ура!

+0

Я просто уклонился, чтобы дать вам эту форму кода из моих заметок. Отлично сработано. pre_get_posts сложно спорить! – BenRacicot

+0

Эта работа для меня, проблема с CPT, спасибо – MrRoman

0

Убедитесь, что вы добавить следующее:

'paged' => get_query_var('paged') 

к вашим $ аргументов, и он должен принять подкачки в порядке.

Подробнее here

+0

Эй, Дэвид. Спасибо, но, как вы видите, я передаю аргумент paged для query_posts(). Или что-то не так с этим? – Status4

+0

Упс, мой плохой. Я бы предположил, что вы делаете 'print_r ($ args);' чтобы точно видеть, что отправляется, это может быть вашим первым ключом к проблеме. Другое дело: showposts развращается, вместо этого используйте post_per_page. Наконец, вы можете попробовать явно установить «nopaging» => false – David

+0

Я попробую, спасибо – Status4

0

В archive.php попробуйте следующее:

query_posts(array(
    'post_type' => 'lifestream', 
    'posts_per_page' => 6, 
    'orderby' => 'menu_order', 
    'orderby' => 'date', 
    'order' => 'ASC', 
    'paged' => '' . get_query_var('paged') 
)); 

if (have_posts()) : while (have_posts()) : the_post(); 

endwhile; else: 
endif; 

Для следующей и предыдущей странице ссылки, которые я использую:

next_posts_link('Older Entries', $wp_query->max_num_pages); 
previous_posts_link('Newer Entries', $wp_query->max_num_pages); 
Смежные вопросы