Dlaczego potrzebujesz paginacji z nieprawdopodobną liczbą całkowitą?

17

paginate_linksOdniesienia funkcja Codex ma jakiś przykładowy kod, który jest być umieszczane w całej sieci.

Ma sekcję, która używa zmiennej o nazwie $big = 999999999; // need an unlikely integer:

echo 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
) );

I jest używany w str_replacew echo paginate_linksfunkcji.

Czy to jakaś forma enkapsulacji?

Jason Green
źródło

Odpowiedzi:

16

Uwaga get_pagenum_link( $big ): Spowoduje to utworzenie adresu URL ( nie łącza) na podstawie liczby podanej w pierwszym parametrze.

Ta funkcja służy do uzyskania podstawowego wzorca adresu URL, a tutaj używana jest wysoka liczba całkowita, ponieważ:

  1. Jako argument należy podać liczbę całkowitą.
  2. Wynikowy adres URL jest filtrowany apply_filters('get_pagenum_link', $result)i może być zmieniany przez wtyczki. Ryzyko to jest nieco wyższe w przypadku liczb pasujących do istniejących stron, na przykład gdy wtyczka implementuje osobne tytuły dla podstron.

To tylko… brudna konwencja, sygnał dla innych wtyczek: nie zmieniaj tego, proszę! Myślę, że PHP_INT_MAXbyłoby lepiej, ale nadal brzydko. Zastanawiam się, ilu programistów wtyczek to wie .

Numer jest następnie zastępowany przez symbol zastępczy potrzebny w paginate_links().

To, co tu widzisz, to niekompletny interfejs API . Spróbuj nauczyć się czegoś z tego przykładu - nie wydawaj niekompletnych interfejsów API, w przeciwnym razie Twoje dokumenty będą wyglądały na zawstydzające. :)

fuxia
źródło
Zgadzam się, PHP_INT_MAX byłby lepszy IMO, ale bardziej mnie wtedy pomylił. Naprawdę podoba mi się twoje wyjaśnienie, to potwierdza, że ​​myślałem w odpowiedni sposób. Po prostu nie chciałem przyjmować żadnych założeń.
Jason Green
Czy jest to stosowane tylko w przypadku filtra get_pagenum_linkmającego wpływ na istniejące numery stron? (ponieważ i tak paginate_links()używa get_pagenum_link()domyślnie). Wydaje mi się to ekstremalną sprawą, chyba że czegoś mi brakuje?
Cai,
@Cai Wygląda na to, że kiedyś był to prawdziwy problem. Podstawy kodu utrzymywane przez długi czas są zwykle wypełnione obejściami dla przypadków skrajnych.
fuxia
To wygląda paginate_links() nie zawsze używać get_pagenum_link()domyślnie, więc zastanawiam się, czy jest to konwencja z wcześniej i jeżeli całkowita „nieprawdopodobnym” jest naprawdę potrzebne (lub jeśli po prostu prawdziwy obejście get_pagenum_link())?
Cai