Sozdaiblog.ru
Назад

Постраничная навигация в WordPress без плагина!

Опубликовано: 16.08.2012
Время на чтение: 7 мин
43
3

Здравствуйте, дорогие друзья и читатели – Sozdaiblog.ru!

Тема сегодняшней статьи постраничная навигация WordPress.

Некоторое время назад, мы с Вами уже обсуждали похожую тему.

В ней я описывал замечательный плагин – «WP-PageNavi», который реализовывал удобную и простую постраничную навигацию в WordPress.

Да, плагин действительно хорош, но его присутствие, это ещё одна нагрузка на Ваш ресурс.

Поэтому избавление от лишнего плагина, поможет нам сделать ещё один шаг к увеличению скорости загрузки сайта.

Взамен плагину мы создадим постраничную навигацию php кодом.

 

Постраничная навигация PHP для WordPress без плагина

Для реализации постраничной навигации WordPress без плагина, нам потребуется следующий код:

 


// Постраничная навигация
function wp_corenavi() {
  global $wp_query, $wp_rewrite;
  $pages = '';
  $max = $wp_query->max_num_pages;
  if (!$current = get_query_var('paged')) $current = 1;
  $a['base'] = str_replace(999999999, '%#%', get_pagenum_link(999999999));
  $a['total'] = $max;
  $a['current'] = $current;

  $total = 1; //1 - выводить текст "Страница N из N", 0 - не выводить
  $a['mid_size'] = 3; //сколько ссылок показывать слева и справа от текущей
  $a['end_size'] = 1; //сколько ссылок показывать в начале и в конце
  $a['prev_text'] = '«'; //текст ссылки "Предыдущая страница"
  $a['next_text'] = '»'; //текст ссылки "Следующая страница"

  if ($max > 1) echo '<div class="navigation">';
  if ($total == 1 && $max > 1) $pages = '<span class="pages">Страница ' . $current . ' из ' . $max . '</span>'."\r\n";
  echo $pages . paginate_links($a);
  if ($max > 1) echo '</div>';
}
// Постраничная навигация

 

Его нужно установить в файл – «functions.php», который находится в папке Вашей активной темы оформления.

Перед тем, как делать изменения в этом файле, обязательно сделайте бэкап Вашего ресурса.

Внутри кода Вы сможете найти настройки, которые помогут изменить некоторые функции вывода навигации.

Далее, скопируйте следующий код и вставьте его в то место, где Вы хотите, чтобы отображалась постраничная навигация:

 

<?php if (function_exists('wp_corenavi')) wp_corenavi(); ?>

 

Обычно, постраничную навигацию вордпресс выводят на главной странице. Для этого второй код нужно вставить в файл – «index.php», Вашей темы оформления.

Ещё, было-бы неплохо вывести постраничную навигацию php, в Ваших рубриках.

Чтобы это реализовать, нужно тот же код вставить в файл – «archive.php».

Для корректного отображения навигации, нужно вставлять вышеупомянутый код после строчки – «<?php endif; ?>».

Единственное, что мне постоянно мешало с реализацией постраничной навигации WordPress без плагина, так это стандартная навигация, которая есть во всех движках после версии 2.5.

За её вывод отвечает следующий кусок кода:

 

<?php
if(function_exists('wp_pagenavi')) { ?>
        <div id="pagination">
        <?php wp_pagenavi(); ?>
        </div>
<?php } else {
global $wp_query;
$total_pages = $wp_query->max_num_pages;
if ( $total_pages > 1 ) { ?>
        <div id="pagination">
                <?php posts_nav_link(' | ', __('&laquo; Previous page','chocolate'), __('Next page &raquo;','chocolate')); ?>
        </div>
<?php }
} ?>

 

Он, как раз находится после той строчки.

Просто замените его на свой.

Статья получилась короткая, но очень полезная.

Расскажите, а как у Вас реализована в WordPress постраничная навигация?

На сегодня всё, а впереди Вас ждёт куча новой и полезной информации, не пропустите.

 

С уважением, Денис Черников!

Поделиться
Похожие записи
Комментарии:
  • Ольга
    Опубликовано: 17.08.2012 Ответить на сообщение

    Здравствуйте. Давно хотела этим заняться, даже начала искать информацию. А тут подарочек...
    Столько привлекательных плагинов, многие хочется установить.
    А если есть возможность обойтись без плагина, надо обязательно этим воспользоваться.

    • Денис Черников
      Опубликовано: 17.08.2012 Ответить на сообщение

      Здравствуйте,Ольга! Конечно, без плагинов ваш движок будет не так сильно нагружаться, а значит мы будем впереди планеты всей!
      Во я загнул!)

  • Анастасия
    Опубликовано: 17.08.2012 Ответить на сообщение

    У меня PageNavi стоит, но теперь буду менять на Ваш код Стараюсь свести к минимуму количество плагинов.

    • Денис Черников
      Опубликовано: 17.08.2012 Ответить на сообщение

      Замечательно, Анастасия! Если что, стучите!

  • Алексей
    Опубликовано: 17.08.2012 Ответить на сообщение

    Денис, привет!!!
    Вроде и действовал по твоим указаниям, но выносит блог постоянно...
    Может ли проблема быть связана с темой блога?
    Коды не воспринимает совсем...:)

    • Денис Черников
      Опубликовано: 17.08.2012 Ответить на сообщение

      Привет, Алексей!
      Думаю тема не при чём, код отлично работает!

  • Александр
    Опубликовано: 17.08.2012 Ответить на сообщение

    Денис, коды с твоего сайта взять трудно, скорее всего код скопирован был неправильно, отсюда блог выносит.

    • Денис Черников
      Опубликовано: 17.08.2012 Ответить на сообщение

      Как трудно! Всё нормально копируется, просто при копировании пропадает выделение того что вы копируете, а в буфере обмена всё есть! Сам проверял!

  • Олег
    Опубликовано: 17.08.2012 Ответить на сообщение

    Пока пользуюсь плагином, возможно поменяю на код.

    • Денис Черников
      Опубликовано: 17.08.2012 Ответить на сообщение

      Да я сам, долго тянул, но желание совершенства взяло верх!)

  • Андрей
    Опубликовано: 17.08.2012 Ответить на сообщение

    это необходимо делать обязательно

    • Денис Черников
      Опубликовано: 17.08.2012 Ответить на сообщение

      А то!)

  • Василий
    Опубликовано: 18.08.2012 Ответить на сообщение

    Денис, а навигация отображаться будет так как на вашем блоге?

    • Денис Черников
      Опубликовано: 18.08.2012 Ответить на сообщение

      Да, как у меня, но можно немного подстроить на свой вкус!

  • Андрей
    Опубликовано: 11.11.2012 Ответить на сообщение

    Это навигация как у вас на сайте? Такая же резиновая? Или тоже простая постраничная?

    • Денис Черников
      Опубликовано: 11.11.2012 Ответить на сообщение

      У меня не постраничная навигация, а бесконечная прокрутка страниц (по другому — СКРОЛЛИНГ). А в этой статье речь идёт именно о постраничной.

      • Сергей Медведев
        Опубликовано: 07.02.2013 Ответить на сообщение

        Вот это меня и заинтересовало!
        Денис, как сделать такой сколлинг?

        • Денис Черников
          Опубликовано: 07.02.2013 Ответить на сообщение

          Об этом у меня есть статья, посмотри в карте.

  • Юлия
    Опубликовано: 12.12.2012 Ответить на сообщение

    Спасибо за код, у меня сразу получилось, хоть я вообще мало еще понимаю в таких вещах. Единственное, хотелось чтоб цифры были немного побольше, заметнее что ли... Может заглянете и посоветуете что-то? Спасибочки!

    • Денис Черников
      Опубликовано: 12.12.2012 Ответить на сообщение

      Пожалуйста, Юлия! Размер, можно изменить в стилях CSS!

  • Вера
    Опубликовано: 12.03.2013 Ответить на сообщение

    Здравствуйте, Денис. Я новичок в WP, попросили помочь. На сайте интернет-магазина в каталоге товара (jigoshop) есть постраничный вывод, но там указывается только «Следующая» и «Предыдущая» страница, а хотелось бы чтобы указывалось и количество страниц и была выделена текущая. Где это найти и что сделать?
    Заранее спасибо.

    • Денис Черников
      Опубликовано: 12.03.2013 Ответить на сообщение

      Здравствуйте, Вера!А статья разве не об этом?

  • MAKAVE
    Опубликовано: 06.04.2013 Ответить на сообщение

    Здравствуйте, Денис.
    Спасибо за фикс, хотел написать свою функцию, но лень — как известно, двигатель прогресса решил посмотреть что есть из сорса в сети, и таким образом наткнулся на ваш пост.
    Не люблю ставить плагины, там где можно обойтись простым хаком (расширением) функционала, за счет файла functions темы, тем самым снизить лишний раз нагрузку на движок от плагинов.
    Единственное что бы я добавил, вернее перенес, проверку на определение функции «function_exists» в сам файл functions:
    if ( ! function_exists ( 'navigation' ) ) :
    function navigation ( $html_id ) {
    }
    endif;
    Ещё добавил бы опцию, через которую можно задать индивидуальный css класс/ или id для каждого вывода постраничной навигации
    function navigation ( $html_id )
    и вставил бы её в блок.
    echo '';
    а использовал бы как/то так navigation ( 'название css класс' );
    Но это мои предпочтения.
    ps: название функции я тоже поменял под себя.

    • Денис Черников
      Опубликовано: 06.04.2013 Ответить на сообщение

      У меня всё руки не доходят для добавления определения классам. Да и как-то без этого нормально работало. Но на будущее учтём.

  • Дмитрий
    Опубликовано: 13.04.2013 Ответить на сообщение

    Доброго дня
    У меня в теме вот так сделана навигация:
    Я когда пытаюсь вместо этой навигации вставить код с вашего сайта — у меня страница вообще не открывается — белый экран

    • Денис Черников
      Опубликовано: 13.04.2013 Ответить на сообщение

      Используйте тогда другой способ.

  • Сумрачек
    Опубликовано: 12.06.2013 Ответить на сообщение

    ПРивет. Спасибо за радикальное решение! Скажите пожалуйста, как я могу стилизовать эту пагинацию средствами цсс? Как мне разметить текущий код?

    • Денис Черников
      Опубликовано: 12.06.2013 Ответить на сообщение

      Пожалуйста! CSS я не пробовал тут реализовать, да и зачем, если и так всё отлично работает!

      • Сумрачек
        Опубликовано: 12.06.2013 Ответить на сообщение

        Попросту у меня вот такая пагинация http: //s16.postimg.org/jtax4zgat/pavenavi.jpg, мучениям конца и света нет, может подскажете что подставить куда?

        • Денис Черников
          Опубликовано: 13.06.2013 Ответить на сообщение

          Вы можете нормально выразиться, что Вы хотите?

  • Сумрачек
    Опубликовано: 13.06.2013 Ответить на сообщение

    Я вроде бы очень конкретно выразил свою цель Уже сам сверстал, если кому понадобится пагинация такого вида, пишите в комментах майл, сброшу файлы.
    Спасибо автору. К статье нужно добавить дополнение про css классы, что бы было сразу понятно что прописывать в каскадную таблицу стилей.

    • Денис Черников
      Опубликовано: 13.06.2013 Ответить на сообщение

      Здесь невозможно дать универсальное решении для CSS, ведь все шаблоны разные!

  • Сумрачек
    Опубликовано: 13.06.2013 Ответить на сообщение

    Можно. Я же дал. вот посмотрите http: //neznkamomka.by и можно хоть кнопками сделать, хоть ромбиками.

    • Денис Черников
      Опубликовано: 13.06.2013 Ответить на сообщение

      Если так, то хорошо, но мы друг друга немного не поняли!

  • Дмитрий
    Опубликовано: 17.09.2013 Ответить на сообщение

    Здравствуйте! Подскажите как сделать такой вариант:
    «<>» , без цифр между ссылками?
    Спасибо!

    • Денис Черников
      Опубликовано: 17.09.2013 Ответить на сообщение

      Уберите строки отвечающие за вывод количества страниц!

      • Дмитрий
        Опубликовано: 17.09.2013 Ответить на сообщение

        Денис, спасибо за быстрый ответ. Удалить строчки из Вашего кода(если да, то пожалуйста скопируйте из статьи — какие именно) или из файла темы? Спасибо!

        • Денис Черников
          Опубликовано: 17.09.2013 Ответить на сообщение

          Пожалуйста, Дмитрий!
          Удалить из моего кода, они подписаны все, это видно!

          • Дмитрий
            Опубликовано: 18.09.2013 Ответить на сообщение

            Спасибо за помощь, но удаление строк приводит к кривому отображению страниц или исчезанию ссылок навигации.
            Удачи! Отличный сайт. Узнал много нового!

  • Евгений
    Опубликовано: 24.05.2014 Ответить на сообщение

    Немного не по теме, подходящей просто не нашёл, но у меня такой вопрос. В настройках чтения сайта у меня отмечен пункт «Анонс», я так понимаю, что этот пункт отвечает за то, что при написании новой записи, на главной странице, должен появиться анонс записи, а у меня появляется вся запись целиком, а хотелось бы, что бы появлялся именно анонс, т. е. часть записи со ссылкой на остальную запись.
    Денис, помогите пожалуйста, как добиться именно анонса?
    Спасибо.

    • Денис Черников
      Опубликовано: 25.05.2014 Ответить на сообщение

      При редактировании записи в редакторе нужно ставить тег «more», он там в настройках редактора на панели инструментов, где цвет, заголовки и всё остальное. Ставьте в нужное место статьи и он отрежет ту часть которая должна быть в анонсе!

  • андрей
    Опубликовано: 16.10.2014 Ответить на сообщение

    А как же стили ? все работает но хотелось бы настроить стили, если не затруднит выложи код со стилями которые прописаны у тебя.

    • Денис Черников
      Опубликовано: 21.10.2014 Ответить на сообщение

      Да Вы просто через Фаербаг откройте и посмотрите!

Имя
Укажите своё имя и фамилию
E-mail
Без СПАМа, обещаем
Текст сообщения
Отправляя данную форму, вы соглашаетесь с политикой конфиденциальности и правилами нашего сайта.