У меня есть настраиваемый тип сообщения "charters", и на моей странице category.php у меня есть цикл, в котором отображаются сообщения "Charter" для текущего идентификатора категории. У меня есть настраиваемая настройка разбивки на страницы, отображающая номера страниц, когда я нажимаю ссылку на страницу 2, она переходит на URL / page / 2, который отображает ошибку 404. Я не могу понять, почему я получаю 404. Если я настраиваю свои сообщения на страницу, разбивка на страницы обновляется и отображает правильное количество страниц, но ссылки не отображаются.
Код Category.php:
<?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$product_args = array(
'post_type' => 'charters',
'posts_per_page' => 10, //the same as the parse_query filter in our functions.php file
'paged' => $paged,
'page' => $paged,
'cat' => $cat
);
$product_query = new WP_Query( $product_args ); ?>
<?php if ( $product_query->have_posts() ) : ?>
<!-- the loop -->
<?php while ( $product_query->have_posts() ) : $product_query->the_post(); ?>
<article class = "loop">
<h3><?php the_title(); ?></h3>
<div class = "content">
<?php the_excerpt(); ?>
</div>
</article>
<?php endwhile; ?>
<!-- end of the loop -->
<!-- pagination here -->
<?php
if (function_exists( 'custom_pagination' )) :
custom_pagination( $product_query->max_num_pages,"",$paged );
endif;
?>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>
Код Functions.php:
function prefix_change_cpt_archive_per_page( $query ) {
//* for cpt or any post type main archive
if ( $query->is_main_query() && ! is_admin() && is_post_type_archive( 'product' ) ) {
$query->set( 'posts_per_page', '10' );
}
}
add_action( 'pre_get_posts', 'prefix_change_cpt_archive_per_page' );
function prefix_change_category_cpt_posts_per_page( $query ) {
if ( $query->is_main_query() && ! is_admin() && is_category( 'test-category' ) ) {
$query->set( 'post_type', array( 'product' ) );
$query->set( 'posts_per_page', '2' );
}
}
add_action( 'pre_get_posts', 'prefix_change_category_cpt_posts_per_page' );
function custom_pagination( $numpages = '', $pagerange = '', $paged='' ) {
if (empty($pagerange)) {
$pagerange = 2;
}
global $paged;
if (empty($paged)) {
$paged = 1;
}
if ($numpages == '') {
global $wp_query;
$numpages = $wp_query->max_num_pages;
if (!$numpages) {
$numpages = 1;
}
}
$pagination_args = array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%',
'total' => $numpages,
'current' => $paged,
'show_all' => False,
'end_size' => 1,
'mid_size' => $pagerange,
'prev_next' => True,
'prev_text' => __('«'),
'next_text' => __('»'),
'type' => 'plain',
'add_args' => false,
'add_fragment' => ''
);
$paginate_links = paginate_links($pagination_args);
if ($paginate_links) {
echo "<nav class='custom-pagination'>";
echo "<span class='page-numbers page-num'>Page " . $paged . " of " . $numpages . "</span> ";
echo $paginate_links;
echo "</nav>";
}
В моих настройках постоянных ссылок установлено значение «Имя сообщения». Я чувствую, что это как-то связано с перезаписью, но я не могу понять, как заставить URL-адреса страниц работать правильно. Примеры моих категорий следующие:
/ категория / длинный пляж /
/ категория / сан-диего /
Можете ли вы указать мне правильное направление, как отрегулировать смещение?
Вы можете добавить смещение в свою кнопку загрузки, что-то вроде этого <button class = "loadmore" data-offset=10></button> Затем вы можете вызвать ajax с этим смещением в файл php, в этом файле php вы можете использовать это смещение и сгенерировать новый WP_Query, вы можете вернуть результат этот запрос и добавьте его в конец своего 10-го поста.
Блин, это звучит как отличный метод, но, к сожалению, я не знаю, как это сделать. Потребуется некоторая документация.
Я внес изменения в свой исходный код / вопрос, см. Выше.






Если вы используете пагинацию по умолчанию, используйте приведенный ниже код.
<?php
$current_page = get_queried_object();
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$args = array(
'post_type' => 'charters',
'paged' => $paged,
'cat'=> $cat);
$my_query = new WP_Query( $args );
if ( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href = "<?php the_permalink() ?>" rel = "bookmark" title = "Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php
endwhile;
}
next_posts_link( 'Older Entries', $my_query->max_num_pages );
previous_posts_link( 'Newer Entries' );
wp_reset_query();
?>
Добавьте ниже код в свой function.php
function posts_on_categorypage( $query ) {
if ( $query->is_category()) {
$query->set( 'posts_per_page', '10' );
}
}
add_action( 'pre_get_posts', 'posts_on_categorypage' );
Когда я нажимаю ссылку «старый Entires», я получаю ошибку 404, когда пытаюсь перейти к / page / 2 /. Есть идеи, что с этим происходит?
не могли бы вы сообщить мне, используете ли вы какой-либо плагин для разбивки на страницы?
Это все еще дает мне страницу 404. Я не использую плагины.
Я внес изменения в свой исходный код / вопрос, см. Выше.
вы должны попробовать это:
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'charters',
'cat'=> $cat,
'post_per_page'=> 6,
'paged' => $paged
);
$my_query = new WP_Query( $args );
if ( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href = "<?php the_permalink() ?>" rel = "bookmark" title = "Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php
endwhile;
}
wp_reset_query();
?>
<?php echo pnavigation( $query ); ?>
тогда вам нужно добавить следующий код в function.php:
function pnavigation( $wp_query ) {
$big = 999999999; // need an unlikely integer
$pages = paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages,
'prev_next' => false,
'type' => 'array',
'prev_next' => TRUE,
'prev_text' => '←',
'next_text' => '→',
) );
if ( is_array( $pages ) ) {
$paged = ( get_query_var('paged') == 0 ) ? 1 : get_query_var('paged');
echo '<ul class = "pagination pagination-lg">';
foreach ( $pages as $page ) {
echo "<li>$page</li>";
}
echo '</ul>';
}
}
вам нужно просто заменить url (client-testimonials) на ваш url
function pagination_rewrite() {
add_rewrite_rule('client-testimonials/page/?([0-9]{1,})/?$', 'index.php?pagename=client-testimonials&paged=$matches[1]', 'top');
}
add_action('init', 'pagination_rewrite');
Я не верю, что это решение подойдет мне, так как название моей категории будет отличаться для каждой категории .. примеры категорий: / category / san-diego /, / category / long-beach /
Я внес изменения в свой исходный код / вопрос, см. Выше.
В моем коде было несколько ошибок. Это то, что я получаю за копирование / вставку кода, а не за его выполнение построчно. Спасибо всем, кто помог, но я заставил это работать, изменив:
Плохой код:
function prefix_change_category_cpt_posts_per_page( $query ) {
if ( $query->is_main_query() && ! is_admin() && is_category( 'test-category' ) ) {
$query->set( 'post_type', array( 'product' ) );
$query->set( 'posts_per_page', '2' );
}
}
Хороший код:
function prefix_change_category_cpt_posts_per_page( $query ) {
if ( $query->is_main_query() && ! is_admin() && is_category( $cat ) ) {
$query->set( 'post_type', array( 'charters' ) );
$query->set( 'posts_per_page', '10' );
}
}
Привет, вы можете добавить несколько вариантов в
$args, что-то вроде этого$args = array( 'post_type' => 'charters', 'cat'=> $cat, 'posts_per_page' => 10, 'offset' => 0, );, чтобы получить первые 10 сообщений. Вы можете настроитьoffset, чтобы получить следующий набор сообщений.