Зачем вам маловероятное целое число в нумерации страниц?


17

paginate_linksСсылка функции Кодекса имеет некоторые примеры кода , который будучи Повторно по всей сети.

Он имеет раздел, который использует переменную с именем $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
) );

И используется в str_replaceв echo paginate_linksфункции.

Это какая-то форма инкапсуляции?

Ответы:


16

Обратите внимание get_pagenum_link( $big ): это создаст URL ( не ссылку) на основе номера, указанного в первом параметре.

Эта функция используется для получения базового шаблона для URL, и здесь используется высокое целое число, потому что:

  1. Вы должны предоставить целое число в качестве аргумента.
  2. Полученный URL фильтруется apply_filters('get_pagenum_link', $result)и может быть изменен плагинами. Этот риск немного выше для номеров, соответствующих существующим страницам, например, когда плагин реализует отдельные заголовки для подстраниц.

Так что это просто ... грязное соглашение, сигнал для других плагинов: не меняйте это, пожалуйста! Я думаю, PHP_INT_MAXчто было бы лучше, но все еще безобразно. И мне интересно, сколько разработчиков плагинов знают это.

Затем номер заменяется на заполнитель, необходимый в paginate_links().

То, что вы видите здесь, является неполным API . Попробуйте извлечь уроки из этого примера - не выпускайте неполные API, иначе ваши документы будут выглядеть неловко. :)


Я согласен, что PHP_INT_MAX был бы лучше IMO, но в это время меня больше смутило бы. Мне очень нравится ваше объяснение, оно подтверждает, что я думал правильно. Я просто не хотел делать никаких предположений.
Джейсон Грин

Так это используется только в случае фильтра на get_pagenum_linkвоздействие на существующие номера страниц? (так как paginate_links()использует get_pagenum_link()по умолчанию в любом случае). Мне кажется, это крайний случай, если я что-то упустил?
Цай

@Cai Похоже, это была настоящая проблема. Основы кода, поддерживаемые в течение длительного времени, как правило, заполняются обходными путями для крайних случаев.
Fuxia

Это выглядит paginate_links() не всегда использовать get_pagenum_link()по умолчанию , так что мне интересно , если это соглашение от до этого , и если «маловероятного целого» действительно необходимо (или , если реальный обходной путь был просто get_pagenum_link())?
Цай
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.