Получение Ссылки на Номер Страницы с помощью get_pagenum_link()

## Получение Ссылки на Номер Страницы (GET_PAGENUM_LINK())

Функция get_pagenum_link() позволяет получить ссылку на определённый номер страницы, что полезно при работе с пагинацией (разделением контента на страницы).

### Использование

Функция используется в следующих случаях:
- get_next_posts_page_link() — для получения ссылки на следующую страницу.
- get_previous_posts_page_link() — для получения ссылки на предыдущую страницу.

### Параметры Функции

```php
get_pagenum_link( $pagenum, $escape );
  • $pagenum (int) — номер страницы. По умолчанию: 1.
  • $escape (bool) — нужно ли избежать специальные символы в URL с помощью функции esc_url(). Если установить значение false, URL будет подготовлен с использованием функции sanitize_url(). По умолчанию: true.

Возвращаемое Значение

Функция возвращает строку, содержащую URL-ссылку для указанного номера страницы.

Примеры Использования

Пример 1: Получение Ссылки на Определенную Страницу

echo get_pagenum_link( 4 );

// На главной странице:
// возвращает: http://example.com/page/4

// На странице: http://example.com/article
// возвращает: http://example.com/article/page/4

Пример 2: Изменение Ссылки Пагинации

Допустим, на главной странице необходимо добавить /article/ к ссылкам пагинации. То есть, менять http://example.com/page/1 на http://example.com/article/page/1.

add_filter( 'get_pagenum_link', 'edit_paginate_url_for_home_page' );

function edit_paginate_url_for_home_page( $url ){
    if( ! is_home() || is_paged() )
        return;

    static $site = '';
    $site || $site = home_url();

    $url  = preg_replace( "@^$site/(.*)@", "$site/article/1", $url );

    return $url;
}

Важные Заметки

  • Глобальные Переменные: Использует компонент WP_Rewrite для работы с пермалинками.
  • История Изменений: Функция была представлена с версии 1.5.0.

Код Функции

Вот как выглядит реализация функции get_pagenum_link() в WordPress:

function get_pagenum_link( $pagenum = 1, $escape = true ) {
    global $wp_rewrite;

    $pagenum = (int) $pagenum;
    $request = remove_query_arg( 'paged' );

    $home_root = parse_url( home_url() );
    $home_root = ( isset( $home_root['path'] ) ) ? $home_root['path'] : '';
    $home_root = preg_quote( $home_root, '|' );

    $request = preg_replace( '|^' . $home_root . '|i', '', $request );
    $request = preg_replace( '|^/+|', '', $request );

    if ( ! $wp_rewrite->using_permalinks() || is_admin() ) {
        $base = trailingslashit( get_bloginfo( 'url' ) );

        if ( $pagenum > 1 ) {
            $result = add_query_arg( 'paged', $pagenum, $base . $request );
        } else {
            $result = $base . $request;
        }
    } else {
        $qs_regex = '|?.*?$|';
        preg_match( $qs_regex, $request, $qs_match );

        $parts   = array();
        $parts[] = untrailingslashit( get_bloginfo( 'url' ) );

        if ( ! empty( $qs_match[0] ) ) {
            $query_string = $qs_match[0];
            $request      = preg_replace( $qs_regex, '', $request );
        } else {
            $query_string = '';
        }

        $request = preg_replace( "|$wp_rewrite->pagination_base/d+/?$|", '', $request );
        $request = preg_replace( '|^' . preg_quote( $wp_rewrite->index, '|' ) . '|i', '', $request );
        $request = ltrim( $request, '/' );

        if ( $wp_rewrite->using_index_permalinks() && ( $pagenum > 1 || '' !== $request ) ) {
            $parts[] = $wp_rewrite->index;
        }

        $parts[] = untrailingslashit( $request );

        if ( $pagenum > 1 ) {
            $parts[] = $wp_rewrite->pagination_base;
            $parts[] = $pagenum;
        }

        $result = user_trailingslashit( implode( '/', array_filter( $parts ) ), 'paged' );
        if ( ! empty( $query_string ) ) {
            $result .= $query_string;
        }
    }

    $result = apply_filters( 'get_pagenum_link', $result, $pagenum );

    if ( $escape ) {
        return esc_url( $result );
    } else {
        return sanitize_url( $result );
    }
}

Связанные Функции

  • edit_bookmark_link()
  • edit_comment_link()
  • get_attachment_link()
  • get_permalink()
  • get_sample_permalink()
  • get_tag_link()
  • get_term_link()
  • get_the_permalink()
  • the_permalink()
  • wp_get_shortlink()

Эти функции помогут вам лучше управлять URL-адресами и пагинацией в вашем WordPress сайте.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *