5 фрагментов кода разбиения на страницы WordPress с примерами [от простого к сложному]

Опубликовано: 2020-02-03

код пагинации в примерах WordPress Если вы ищете лучший код разбивки на страницы в WordPress с конкретными примерами, вы обнаружите, что примеры фрагментов кода разбивки на страницы, опубликованные в этом посте, будут очень полезными. Вы можете применить этот код разбиения на страницы в теме WordPress или в пользовательском плагине WordPress, который требует разбиения на страницы сообщений. Позвольте мне прервать преследование и поделиться моими любимыми фрагментами кода разбиения на страницы:

#1) Цикл WordPress с простым кодом разбиения на страницы

Если вы хотите добавить разбиение на страницы в цикле WordPress, вы можете использовать следующий и предыдущий код разбивки на страницы ниже:

 <?php если ( have_posts() ) : ?>

<!-- Добавьте сюда функции пагинации. -->

<!-- Начало основного цикла. -->
<?php while ( have_posts() ): the_post(); ?>

<!-- остальная часть основного цикла вашей темы -->

<?php в конце; ?>
<!-- Конец основного цикла -->

<!-- Добавьте сюда функции пагинации. -->

<div class="nav-previous alignleft"><?php previous_posts_link('Старые сообщения'); ?></дел>
<div class="nav-next alignright"><?php next_posts_link('Новые сообщения'); ?></дел>

<?php еще : ?>
<p><?php _e('Извините, нет сообщений, соответствующих вашим критериям.'); ?></p>
<?php конец; ?>

# 2) Числовая пагинация WordPress

Еще один отличный вариант разбивки на страницы WordPress — использовать числовую разбивку на страницы, которая добавляет номера к сообщениям и группирует сообщения на основе числа. Например, вы можете отображать 5 сообщений на странице. Это код разбивки на страницы в WordPress для числовой разбивки на страницы :

 <?php 

#ШАГ 1: Создайте числовую функцию разбивки на страницы WordPress 

функция njengah_numeric_pagination() {
 
    если(является_единственным())
        возвращение;
 
    глобальный $wp_query;
 
    /** Остановить выполнение, если имеется только 1 страница */
    если($wp_query->max_num_pages <= 1)
        возвращение;
 
    $paged = get_query_var('выгружается')? absint(get_query_var('выгружаемый')): 1;
    $max = intval($wp_query->max_num_pages);
 
    /** Добавляем текущую страницу в массив */
    если ($paged >= 1)
        $ссылки[] = $страницы;
 
    /** Добавляем в массив страницы вокруг текущей */
    если ($paged >= 3) {
        $links[] = $paged - 1;
        $links[] = $paged - 2;
    }
 
    если ( ( $paged + 2 ) <= $max ) {
        $links[] = $paged + 2;
        $links[] = $paged + 1;
    }
 
    эхо '<div class="navigation"><ul>' . "\п";
 
    /** Ссылка на предыдущий пост */
    если (get_previous_posts_link())
        printf('<li>%s</li>'. "\n", get_previous_posts_link());
 
    /** Ссылка на первую страницу, плюс многоточие, если необходимо */
    если ( ! in_array( 1, $ссылки )) {
        $class = 1 == $paged ? ' класс = "активный"' : '';
 
        printf('<li%s><a href="%s">%s</a></li>'. "\n", $class, esc_url(get_pagenum_link(1)), '1');
 
        если ( ! in_array( 2, $ссылки ))
            эхо '<li>…</li>';
    }
 
    /** Ссылка на текущую страницу, плюс 2 страницы в любом направлении, если необходимо */
    сортировать($ссылки);
    foreach ( (массив) $links как $link ) {
        $class = $paged == $ссылка? ' класс = "активный"' : '';
        printf('<li%s><a href="%s">%s</a></li>'. "\n", $class, esc_url(get_pagenum_link($link)), $link);
    }
 
    /** Ссылка на последнюю страницу, плюс многоточие, если необходимо */
    если (! in_array($max, $links)) {
        если (! in_array($max - 1, $links))
            эхо '<li>…</li>' . "\п";
 
        $class = $paged == $max ? ' класс = "активный"' : '';
        printf('<li%s><a href="%s">%s</a></li>'. "\n", $class, esc_url(get_pagenum_link($max)), $max);
    }
 
    /** Ссылка на следующий пост */
    если (get_next_posts_link())
        printf('<li>%s</li>'. "\n", get_next_posts_link());
 
    эхо '</ul></div>' . "\п";
 
}

#ШАГ 2: Добавьте в шаблоны, используя этот вызов функции выше 

njengah_numeric_pagination();

# ШАГ 3: Настройте нумерацию страниц в соответствии со стилями вашей темы. 

/** Классы CSS для оформления нумерации страниц*/ 

.навигация ли {
    
}
.navigation li a{
	
	
}

# 3) Пример пагинации WordPress Ajax

Если вы ищете код разбивки на страницы Ajax в WordPress, я нашел пример на GitHub, который работает очень хорошо, и код представлен в виде плагина. Я настроил его, чтобы сделать его плагином для нашего руководства, и код можно скопировать в файл, сохранить в формате zip и установить как плагин. Ниже приведен пример кода разбивки на страницы WordPress Ajax:

 <?php
/**
 * Название плагина: Njengah Ajax Pagination
 * URI плагина: https://njengah.com 
 * Описание: Пример разбиения на страницы WordPress Ajax.
 * Версия: 1.0.0
 * Автор: Джо Нженга
 * URI автора: https://njengah.com 
 * Лицензия: GPL-2.0+
 * URI лицензии: http://www.gnu.org/licenses/gpl-2.0.txt
 * Текстовый домен: cs-pagination
 * Путь к домену: /languages
 */

// Кредит - Каспер Шульц 

класс Njengah_Ajax_Pagination {

	защищено $num_per_page;

	публичная функция __construct() {
		$this->num_per_page = 5;
		$это->инициализировать();
	}

	инициализация защищенной функции () {
		add_action('init', array($this, 'add_rewrite_rule'));
		add_filter('query_vars', массив($this, 'add_query_vars'));
		add_action('parse_request', массив($this, 'parse_request'));
	}

	/**
	 * Разобрать входящий запрос и сгенерировать результат.
	 */
	функция parse_request($wp) {

		если (array_key_exists('cs-page', $wp->query_vars)) {

			$page = isset ( $wp->query_vars['cs-page'] )? $wp->query_vars['CS-страница'] : 1;

			$аргументы = массив(
				'post_type' => 'сообщение',
				'post_per_page' => $this->num_per_page,
				'страница' => $страница,
			);

			$query = новый WP_Query($args);

			// Нам нужно знать общее количество найденных постов.
			$values['total'] = $query->found_posts;

			// И на страницу.
			$values['per_page'] = $this->num_per_page;

			$values['сообщения'] = массив();

			// Позволяет отправлять только те данные, которые нам нужны.
			в то время как ($query->have_posts()) {

				$запрос->the_post();

				$values['сообщения'][] = массив(
					'ID' => получить_the_ID(),
					'название' => get_the_title(),
				);
			}

			wp_reset_postdata();
			wp_send_json ($ значения);
		}
	}

	/**
	 * Добавьте необходимые аргументы запроса.
	 */
	функция add_query_vars($query_vars) {
		$query_vars[] = 'CS-страница';

		вернуть $query_vars;
	}

	/**
	 * Добавляет правило перезаписи для нашей пользовательской нумерации страниц, чтобы мы могли избежать использования admin-ajax.
	 */
	функция add_rewrite_rule() {
		add_rewrite_rule('^cs-paginate/([0-9]+)/?', 'index.php?cs-page=$matches[1]', 'top' );
	}

	/**
	 * Сброс правил перезаписи.
	 */
	статическая функция установить () {
		flush_rewrite_rules();
	}
}


функция njengah_ajax_pagination_init() {
	новый Njengah_Ajax_Pagination();
}

njengah_ajax_pagination_init();

// Необходимо сбросить правила перезаписи при активации.
register_activation_hook(__FILE__, array('Njengah_Ajax_Pagination', 'install'));

# 4) Разбиение на страницы WordPress для пользовательского типа записи

Для разбивки на страницы пользовательского типа записи вам нужно использовать WP_query для проверки пользовательского типа записи, а в аргументах вы передаете настраиваемый тип записи в post_type, а затем используете код разбивки на страницы для создания разбивки на страницы WordPress для пользовательского типа записи.

Ниже приведен код, который вы должны добавить в functions.php и заменить post_type на соответствующий слаг пользовательского типа записи:

 <?php 

/**
 * Разбиение на страницы WordPress для пользовательских типов сообщений  
 */ 
 
 <?php

 $paged = (get_query_var('paged'))? get_query_var('выгружается'): 1;

	$аргументы = массив(
		 'post_type' => 'custom_post_type_name',
		 'сообщений_на_странице' => 10,
		 'выгружается' => $выгружается
	);

	$цикл = новый WP_Query($args);

	в то время как ($loop->have_posts()): $loop->the_post();
 
 // Содержимое пользовательского типа записи 
 
конец;
?>
<nav class="разбиение на страницы">
     <?php
     $большой = 999999999;
     echo paginate_links(массив(
          'base' => str_replace($big, '%#%', get_pagenum_link($big)),
          'формат' => '?paged=%#%',
          'текущий' => макс( 1, get_query_var('выгружаемый') ),
          'всего' => $loop->max_num_pages,
          'пред_текст' => '&laquo;',
          'след_текст' => '&raquo;'
     ));
?>
</nav>
<?php wp_reset_postdata(); ?>

# 5 Пользовательская пагинация запросов WordPress

Пользовательский код разбивки на страницы запроса в WordPress использует WP_query для получения определенного сообщения, которое мы хотим разбить на страницы, а затем объединяет результаты запроса с кодом разбиения на страницы, чтобы применить разбиение на страницы к конкретным выбранным нами сообщениям. Ниже приведен пример разбиения на страницы пользовательского запроса в WordPress.

 <?php

//Пользовательский запрос 

$paged = (get_query_var('paged'))? absint(get_query_var('выгружаемый')): 1;
 
$аргументы = массив(
    'сообщений_на_странице' => 5,
    'category_name' => 'галерея',
    'выгружается' => $выгружается,
);
 
$the_query = новый WP_Query($args);
?>
<!-- цикл и т.д.. -->

<?php

// Пагинация 
$большой = 999999999; // нужно маловероятное целое
 
echo paginate_links(массив(
    'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
    'формат' => '?paged=%#%',
    'текущий' => макс( 1, get_query_var('выгружаемый') ),
    'всего' => $the_query->max_num_pages
));

Вывод

В этом посте мы выделили различные типы разбиения на страницы WordPress и поделились специальным кодом разбиения на страницы для использования в каждом случае. Этот код разбивки на страницы в WordPress можно добавить к существующим темам или плагинам, а также можно добавить в WordPress как отдельный плагин.