- Вопрос или проблема
- Ответ или решение
- Как исправить проблему с пустыми ссылками на страницах в WordPress
- 1. Проверка структуры постоянных ссылок
- 2. Анализ кода functions.php
- 3. Использование the_posts_pagination()
- 4. Проверьте наличие шаблона archive.php
- 5. Проверки и отладка
- 6. Комментарий по вашему вопросу о выводе $output
- Заключение
Вопрос или проблема
Я работаю над блогом на WordPress, который, похоже, имеет собственную пагинацию для постов. Как вы можете видеть здесь, правильное количество ссылок отображается внизу страницы, однако эти ссылки пустые. Вот код в functions.php
function emm_paginate($args = null) {
$defaults = array(
'page' => null, 'pages' => null,
'range' => 3, 'gap' => 3, 'anchor' => 1,
'before' => '<div class="emm-paginate">', 'after' => '</div>',
'title' => __('Страницы:'),
'nextpage' => __('»'), 'previouspage' => __('«'),
'echo' => 1
);
$r = wp_parse_args($args, $defaults);
extract($r, EXTR_SKIP);
if (!$page && !$pages) {
global $wp_query;
$page = get_query_var('paged');
$page = !empty($page) ? intval($page) : 1;
$posts_per_page = intval(get_query_var('posts_per_page'));
$pages = intval(ceil($wp_query->found_posts / $posts_per_page));
}
$output = "";
if ($pages > 1) {
$output .= "$before<span class="emm-title">$title</span>";
$ellipsis = "<span class="emm-gap">...</span>";
if ($page > 1 && !empty($previouspage)) {
$output .= "<a href="" . get_pagenum_link($page - 1) . "" class="emm-prev">$previouspage</a>";
}
$min_links = $range * 2 + 1;
$block_min = min($page - $range, $pages - $min_links);
$block_high = max($page + $range, $min_links);
$left_gap = (($block_min - $anchor - $gap) > 0) ? true : false;
$right_gap = (($block_high + $anchor + $gap) < $pages) ? true : false;
if ($left_gap && !$right_gap) {
$output .= sprintf('%s%s%s',
emm_paginate_loop(1, $anchor),
$ellipsis,
emm_paginate_loop($block_min, $pages, $page)
);
}
else if ($left_gap && $right_gap) {
$output .= sprintf('%s%s%s%s%s',
emm_paginate_loop(1, $anchor),
$ellipsis,
emm_paginate_loop($block_min, $block_high, $page),
$ellipsis,
emm_paginate_loop(($pages - $anchor + 1), $pages)
);
}
else if ($right_gap && !$left_gap) {
$output .= sprintf('%s%s%s',
emm_paginate_loop(1, $block_high, $page),
$ellipsis,
emm_paginate_loop(($pages - $anchor + 1), $pages)
);
}
else {
$output .= emm_paginate_loop(1, $pages, $page);
}
if ($page < $pages && !empty($nextpage)) {
$output .= "<a href="" . get_pagenum_link($page + 1) . "" class="emm-next">$nextpage</a>";
}
$output .= $after;
}
if ($echo) {
echo $output;
}
return $output;
}
/**
* Вспомогательная функция для пагинации, которая формирует ссылки на страницы.
*
* @access private
*
* @author Эрик Мартин <[email protected]>
* @copyright Copyright (c) 2009, Эрик Мартин
* @version 1.0
*
* @param int $start Первая ссылка на страницу.
* @param int $max Последняя ссылка на страницу.
* @return int $page Необязательный, по умолчанию 0. Текущая страница.
*/
function emm_paginate_loop($start, $max, $page = 0) {
$output = "";
for ($i = $start; $i <= $max; $i++) {
$output .= ($page === intval($i))
? "<span class="emm-page emm-current">$i</span>"
: "<a href="" . get_pagenum_link($i) . "" class="emm-page">$i</a>";
}
return $output;
}
****ИЗМЕНЕНИЕ****
Я удалил эту функцию emm из моего functions.php
и index.php
и добавил
<?php the_posts_pagination( array(
'mid_size' => 2,
'prev_text' => __( 'Назад', 'textdomain' ),
'next_text' => __( 'Вперед', 'textdomain' ),
) ); ?>
в мой index.php
, и та же проблема. Номера отображаются и приводят к пустым страницам. Я также заметил, что мой archives.php
отсутствует в корневой папке. Добавил его, и все равно ничего.
Не могли бы вы зайти на эту страницу для нас:
../wp-admin/options-permalink.php
Какая структура выбрана? Это даст вам ответ о том, как настроить функцию внизу
редактировать: Также, почему эта часть такая:
if ($echo) {
echo $output;
}
return $output;
}
Разве $output не должно быть в скобках?
Ответ или решение
Как исправить проблему с пустыми ссылками на страницах в WordPress
Ситуация, с которой вы столкнулись, когда ссылки на страницы выводятся пустыми, может быть вызвана несколькими факторами в настройках вашего WordPress блога. Рассмотрим шаги для решения этой проблемы на основе предоставленного вами кода и описания.
1. Проверка структуры постоянных ссылок
Первым шагом для выявления причины проблемы с пагинацией следует проверить настройки постоянных ссылок:
- Перейдите в Панель управления WordPress → Настройки → Постоянные ссылки.
- Убедитесь, что выбрана правильная структура URL-адресов (например, "Название записи" или соответствующая ваша структура).
После внесения изменений не забудьте нажать кнопку Сохранить изменения. Это может помочь обновить правила перезаписи (rewrite rules) для вашего блога.
2. Анализ кода functions.php
В предоставленном вами коде функции emm_paginate
, важно проверить корректность формирования ссылок. Вот несколько вводных по коду:
- Убедитесь, что переменные
$previouspage
,$nextpage
, и другие используемые в коде элементы корректно передаются и отображаются. - Проверьте, что используется функция
get_pagenum_link()
, чтобы получать правильные URL для номеров страниц.
Например, в секции:
if ($page > 1 && !empty($previouspage)) {
$output .= "<a href=\"" . get_pagenum_link($page - 1) . "\" class=\"emm-prev\">$previouspage</a>";
}
Этот фрагмент должен выглядеть корректно. Обратите внимание на использование двойных кавычек для HTML-тегов и обратные слеши для переменных.
3. Использование the_posts_pagination()
Если вы заменили код на использование функции the_posts_pagination
, проверьте, чтобы в index.php
:
<?php the_posts_pagination( array(
'mid_size' => 2,
'prev_text' => __( 'Назад', 'textdomain' ),
'next_text' => __( 'Вперед', 'textdomain' ),
) ); ?>
Это также должно работать корректно. Если же номера отображаются, но приводят на пустые страницы, скорее всего, проблема связана с неправильным количеством постов на странице или настройками вывода.
4. Проверьте наличие шаблона archive.php
Если в корне вашей темы отсутствует файл archive.php
, его отсутствие может влиять на вывод постов и пагинацию. Убедитесь, что данный файл существует, и при необходимости создайте его на основе index.php
, добавив соответствующую логику для вывода записей.
5. Проверки и отладка
- Проверьте наличие других плагинов или тем, которые могут конфликтовать с пагинацией. Отключите все плагины и смените тему на стандартную, чтобы увидеть, сохранится ли проблема.
- Убедитесь, что у вас есть достаточное количество записей для тестирования пагинации. Возможно, вы просто находитесь на последней странице с результатами.
6. Комментарий по вашему вопросу о выводе $output
Что касается части кода:
if ($echo) {
echo $output;
}
return $output;
Вывод переменной $output
в условии не требует дополнительных скобок, так как оператор echo
выполняет вывод без необходимости в этом. Этот код корректен.
Заключение
Проблема с пустыми ссылками на страницах в WordPress может быть связана с несколькими аспектами, начиная от настроек постоянных ссылок и кода, заканчивая отсутствующими файлами шаблонов. Следуя вышеописанным шагам и рекомендациям, вы сможете идентифицировать и решить проблему. Если проблема не устранена, рассмотрите возможность обращения к сообществу WordPress или к специалистам для более детального анализа.