Моя разбивка на страницы вызывает ошибку 404, когда сообщения из General -> Reading меньше, чем мое пользовательское количество сообщений в моих пользовательских cities
таксономии (пользовательский city
типа сообщений). Из того, что я видел в SO, эту проблему можно устранить, как правило, с помощью фильтра pre_get_posts, но не знаю, как применить его в моем случае. Я хочу упомянуть, что в taxonomy-cities.php
я получаю сообщения категории определенной таксономии пользовательского типа сообщений.
таксономией cities.php
$cat_ID = get_query_var('cities'); $custom_id = get_term_by('slug', $cat_ID, 'cities'); add_filter('posts_orderby', 'edit_posts_orderby'); function edit_posts_orderby($orderby_statement) { global $aPostsIDs; $orderby_statement = 'FIELD(ID, '.implode(',',$_SESSION['saved_city_ids']).')'; return $orderby_statement; } $offset = ($paged - 1) * $num_city_guides_post; $args['post_type'] = 'city'; $args['posts_per_page'] = $num_city_guides_post; // 5 $args['orderby'] = $orderby; // rand $args['order'] = $order; // DESC $args['paged'] = $paged; // 1 $args['tax_query'] = array( array( 'taxonomy' => 'cities', 'field' => 'id', 'terms' => array($custom_id->term_id) // 3742 ) ); } $wp_query = new WP_Query($args); if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); // some code here endwhile; else: echo 'No Posts'; endif; wp_reset_postdata();
Для archive-city.php
я использую этот фильтр в функции.php, и он отлично работает, но он не применяется к taxonomy-cities.php
поэтому я получаю 404:
function portfolio_posts_per_page_city( $query ) { if (array_key_exists('post_type', $query->query_vars)) { if ( $query->query_vars['post_type'] == 'city' ) $num_city_guides_post = get_option('num_city_post'); if( empty( $num_city_guides_post ) ) $num_city_guides_post = 9; $query->query_vars['posts_per_page'] = $num_city_guides_post; return $query; } } if ( !is_admin() ) add_filter( 'pre_get_posts', 'portfolio_posts_per_page_city' );
Возможно, вы можете решить это без фильтров. Работает для разбивки на страницы моих пользовательских типов сообщений
$paged = get_query_var('paged') ? get_query_var('paged') : 1; $args = array( 'post_type' =>'cities', 'posts_per_page' => 0, 'paged' => $paged ); $query = query_posts( $args ); if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> //Do wordpress Loop <?php endwhile; else: include( get_404_template() ); ?> <?php endif; wp_reset_postdata(); ?>
У меня была та же проблема с моими талисманами. Старая страница с сообщениями не была найдена с 404 страницей. Эта проблема связана с пулом таксономии WP, поэтому вам необходимо переписать правила для ваших пользовательских таксономических типов сообщений, как показано ниже:
function generate_taxonomy_rewrite_rules( $wp_rewrite ) { $rules = array(); $post_types = get_post_types( array( 'public' => true, '_builtin' => false ), 'objects' ); $taxonomies = get_taxonomies( array( 'public' => true, '_builtin' => false ), 'objects' ); foreach ( $post_types as $post_type ) { $post_type_name = $post_type->name; $post_type_slug = $post_type->rewrite['slug']; foreach ( $taxonomies as $taxonomy ) { if ( $taxonomy->object_type[0] == $post_type_name ) { $terms = get_categories( array( 'type' => $post_type_name, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0 ) ); foreach ( $terms as $term ) { $rules[$post_type_slug . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug; $rules[$post_type_slug . '/' . $term->slug . '/page/?([0-9]{1,})/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug . '&paged=' . $wp_rewrite->preg_index( 1 ); } } } } $wp_rewrite->rules = $rules + $wp_rewrite->rules; } add_action('generate_rewrite_rules', 'generate_taxonomy_rewrite_rules');
,function generate_taxonomy_rewrite_rules( $wp_rewrite ) { $rules = array(); $post_types = get_post_types( array( 'public' => true, '_builtin' => false ), 'objects' ); $taxonomies = get_taxonomies( array( 'public' => true, '_builtin' => false ), 'objects' ); foreach ( $post_types as $post_type ) { $post_type_name = $post_type->name; $post_type_slug = $post_type->rewrite['slug']; foreach ( $taxonomies as $taxonomy ) { if ( $taxonomy->object_type[0] == $post_type_name ) { $terms = get_categories( array( 'type' => $post_type_name, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0 ) ); foreach ( $terms as $term ) { $rules[$post_type_slug . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug; $rules[$post_type_slug . '/' . $term->slug . '/page/?([0-9]{1,})/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug . '&paged=' . $wp_rewrite->preg_index( 1 ); } } } } $wp_rewrite->rules = $rules + $wp_rewrite->rules; } add_action('generate_rewrite_rules', 'generate_taxonomy_rewrite_rules');
Это должно работать для всех таксономий типа пользовательских сообщений, и если вы хотите быть более конкретными, вы можете попробовать обновить эти две переменные следующим образом:
$ post_types = get_post_types (array ('name' => 'city', 'public' => true, '_builtin' => false), 'objects');
$ taxonomies = get_taxonomies (массив ('name' => 'cities', 'public' => true, '_builtin' => false), 'objects');
Наконец, просто используйте цикл запроса по умолчанию, не передавая никаких аргументов. Страницы будут создаваться на основе General -> Reading.
Это старый вопрос, однако у меня недавно была такая же проблема. Следующий фрагмент на самом деле является содержимым моей taxonomy-template.php
с использованием стандартного примера WP_Query .
Как правильно разбивать пользовательскую таксономию типа сообщения
Во-первых, поскольку это шаблон таксономии, первая строка объявляет $term
что позволяет мне получить доступ к массиву терминов и, следовательно, идентификатору таксономии, имени url и т. Д.
Во-вторых, я устанавливаю термин id как переменную, которая будет использоваться в параметре tax_query . Это используется для запроса моих пользовательских videos
типа, а затем получения таксономии (категории) для цикла, хранящихся в $term_id
.
Вы должны сделать свои пользовательские типы сообщений доступными для поиска, чтобы постраничная работа:
Важно :
'exclude_from_search' => false,
taxonomy-template.php
<?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); ?> <?php $term_id = $term->term_id; $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $args = array( 'post_type' => 'videos', 'posts_per_page' => 4, 'paged' => $paged, 'tax_query' => array( array( 'taxonomy' => $term->taxonomy, 'field' => 'term_id', 'terms' => $term_id ) ) ); $the_query = new WP_Query( $args ); ?> <?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <!-- Loop --> <?php endwhile; ?> <?php if ($the_query->max_num_pages > 1) : ?> <?php endif; ?> <?php else: ?> <!-- Nothing Found --> <?php endif; ?>