Поддержка → Проблемы и решения → Страницы пагинаций
Страницы пагинаций
-
Подскажите, пожалуйста, страницы пагинации формируются с урлами
/page/2/
/page/3/Можно ли их поправить на /page-2/ или ?page=2
Где формируются данные урлы?
-
kul86, приветствую.
Можно ли их поправить на /page-2/ или ?page=2
Зависит от того, как у вас реализована пагинация вообще, но можете посмотреть варианты с аргументом «format» функции «wp_link_pages».
Добрый день, спасибо, что откликнулись, функция описана стандартно:
function wp_link_pages( $args = '' ) { global $page, $numpages, $multipage, $more; $defaults = array( 'before' => '<p>' . __( 'Pages:' ), 'after' => '</p>', 'link_before' => '', 'link_after' => '', 'next_or_number' => 'number', 'separator' => ' ', 'nextpagelink' => __( 'Next page' ), 'previouspagelink' => __( 'Previous page' ), 'pagelink' => '%', 'echo' => 1 ); $params = wp_parse_args( $args, $defaults ); /** * Filters the arguments used in retrieving page links for paginated posts. * * @since 3.0.0 * * @param array $params An array of arguments for page links for paginated posts. */ $r = apply_filters( 'wp_link_pages_args', $params ); $output = ''; if ( $multipage ) { if ( 'number' == $r['next_or_number'] ) { $output .= $r['before']; for ( $i = 1; $i <= $numpages; $i++ ) { $link = $r['link_before'] . str_replace( '%', $i, $r['pagelink'] ) . $r['link_after']; if ( $i != $page || ! $more && 1 == $page ) { $link = _wp_link_page( $i ) . $link . '</a>'; } /** * Filters the HTML output of individual page number links. * * @since 3.6.0 * * @param string $link The page number HTML output. * @param int $i Page number for paginated posts' page links. */ $link = apply_filters( 'wp_link_pages_link', $link, $i ); // Use the custom links separator beginning with the second link. $output .= ( 1 === $i ) ? ' ' : $r['separator']; $output .= $link; } $output .= $r['after']; } elseif ( $more ) { $output .= $r['before']; $prev = $page - 1; if ( $prev > 0 ) { $link = _wp_link_page( $prev ) . $r['link_before'] . $r['previouspagelink'] . $r['link_after'] . '</a>'; /** This filter is documented in wp-includes/post-template.php */ $output .= apply_filters( 'wp_link_pages_link', $link, $prev ); } $next = $page + 1; if ( $next <= $numpages ) { if ( $prev ) { $output .= $r['separator']; } $link = _wp_link_page( $next ) . $r['link_before'] . $r['nextpagelink'] . $r['link_after'] . '</a>'; /** This filter is documented in wp-includes/post-template.php */ $output .= apply_filters( 'wp_link_pages_link', $link, $next ); } $output .= $r['after']; } } /** * Filters the HTML output of page links for paginated posts. * * @since 3.6.0 * * @param string $output HTML output of paginated posts' page links. * @param array $args An array of arguments. */ $html = apply_filters( 'wp_link_pages', $output, $args ); if ( $r['echo'] ) { echo $html; } return $html; } /** * Helper function for wp_link_pages(). * * @since 3.1.0 * @access private * * @global WP_Rewrite $wp_rewrite * * @param int $i Page number. * @return string Link. */ function _wp_link_page( $i ) { global $wp_rewrite; $post = get_post(); $query_args = array(); if ( 1 == $i ) { $url = get_permalink(); } else { if ( '' == get_option('permalink_structure') || in_array($post->post_status, array('draft', 'pending')) ) $url = add_query_arg( 'page', $i, get_permalink() ); elseif ( 'page' == get_option('show_on_front') && get_option('page_on_front') == $post->ID ) $url = trailingslashit(get_permalink()) . user_trailingslashit("$wp_rewrite->pagination_base/" . $i, 'single_paged'); else $url = trailingslashit(get_permalink()) . user_trailingslashit($i, 'single_paged'); } if ( is_preview() ) { if ( ( 'draft' !== $post->post_status ) && isset( $_GET['preview_id'], $_GET['preview_nonce'] ) ) { $query_args['preview_id'] = wp_unslash( $_GET['preview_id'] ); $query_args['preview_nonce'] = wp_unslash( $_GET['preview_nonce'] ); } $url = get_preview_post_link( $post, $query_args, $url ); } return '<a href="' . esc_url( $url ) . '">'; }
Не вижу в ней аргумента «format» и не могу понять, как поправить формирование урлов у данных страниц.
kul86, добрый 🙂 Извиняюсь, ошибся. Вот точнее информация:
https://codex.wordpress.org/Function_Reference/paginate_links
<?php $args = array( 'base' => '%_%', 'format' => '?paged=%#%', <<== format 'total' => 1, 'current' => 0, 'show_all' => false, 'end_size' => 1, 'mid_size' => 2, 'prev_next' => true, 'prev_text' => __('« Previous'), 'next_text' => __('Next »'), 'type' => 'plain', 'add_args' => false, 'add_fragment' => '', 'before_page_number' => '', 'after_page_number' => '' ); ?>
Не работает, поменял, но вообще ничего не изменилось.
Если смотреть код, то подключается именно функция wp_pagenavi
Но ее нигде не могу найти, в поисковиках выдается, что это типа плагин, но плагинов пагинации я не ставил.kul86, у WordPress есть «из коробки» своя пагинация, ее можно или кастомизировать, или заменить плагином.
Не работает, поменял, но вообще ничего не изменилось.
Оно и не должно, я вам направление мысли указываю) Так-то надо конкретно вашу ситуацию рассматривать, где что подключается/выводится и как.
Можно ли их поправить на /page-2/ или ?page=2
Какова конечная цель такой замены?
Возможно, будет полезна тема «Как сменить структуру pagination».
Сергей, по поводу цели, возможно это мои заморочки, но
1) Если оставить URL /page/2/, то получается по структуре, что имеется лишний уровень вложенности или страница /page/ должна открываться и что то выдавать в итоге. С точки зрения SEO какая то корявая структура получается;
2) URL в таком виде просто не нравится;
3) Чисто спортивный интерес уже, в том можно ли сменить или нет.По Вашему коду из темы по ссылке, всё работает, но URL преобразуются в вид
/page2/
/page3/Опять же из-за «красоты» хочется
/page-2/
/page-3/Понимаю, где заменить «page» на «page-» в коде (3 строка):
function my_paged_links($string, $type_of_url) { if ( $type_of_url == 'paged') { $string = str_replace('page/', 'page-', $string); } return $string; } add_filter('user_trailingslashit', 'my_paged_links', 10, 2); function my_pagenum_link($link) { if ( $_SERVER['REQUEST_URI'] != '/' ) { preg_match('/\/page[0-9]+/', $_SERVER['REQUEST_URI'], $matches); if ( !empty($matches) ) { $link = str_replace($matches[0], '', $link); } } return $link; } add_filter('get_pagenum_link', 'my_pagenum_link');
Тогда ссылки в пагинации преобразуются в правильные:
/page-2/
/page-3/
Но сами страницы остаются с урлами:
/page2/
/page3/Можно конечно в .htaccess добавить редиректы, но, я так понимаю, и сам код можно как то поправить, чтобы урлы страниц преобразовались, но не могу понять, что именно поправить… Не подскажите? Спасибо!!!
- Тема «Страницы пагинаций» закрыта для новых ответов.