desufag
@desufag

Как создать пагенацию для шаблона страницы в WordPress?

Никак не получается создать постраничную навигацию в WP. Стандартные функции posts_nav_link() и the_posts_navigation() у меня работают только в файле index.php моей темы. Но у меня записи должны выводится на отдельной странице в шаблоне page-news.php. Записи на ней выводятся, но вот пагинацию сделать никак не удаётся. Искал в интернете пользовательские функции для создания пагинации, но у меня они так же не работают, а свою написать не хватает толку, т.к. я новичок в WP и вообще в back-end-разработке. Буду рад любой помощи.

Код page-news.php
<?php get_header(); ?>		
		<main>
			<div class="main-content">
				<h1>Новости</h1>
                
<?php
global $post;
$args = array( 'numberposts' => 4 , 'category' => 1, 'orderby' => 'date');
$myposts = get_posts( $args );
foreach( $myposts as $post ){ setup_postdata($post);
?>
       <div class="articles">
            	
                    <div class="articles-gen-img">
                	   <a href="<?php the_permalink(); ?>">
                       <?php if(has_post_thumbnail()): ?>
                            <?php the_post_thumbnail(); ?>
                       <?php else: ?>
                            <img src="<?php bloginfo('template_url'); ?>/img/no_img.jpg">
                       <?php endif; ?>
                       </a>
            	    </div>
                  <div class="articles-head">
            		  <span class="articles-date"><img src="<?php bloginfo('template_url'); ?>/img/articles-autor.jpg" alt="admin" /> <span><?php the_author(); ?></span> - <?php the_time('j F Y в H:i'); ?></span>
                        <span class="articles-comments"><img src="<?php bloginfo('template_url'); ?>/img/articles-comment.jpg" alt="commets" /> <a href="#"><?php comments_popup_link('Нет комментариев', '1 комментарий', '%1$s комментариев', '', 'Комментирование отключено'); ?></a></span>           
         	      </div>
                
                    <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
                    <?php the_excerpt(); ?>

				    <p><a href="<?php the_permalink(); ?>">Читать дальше...</a></p>
                
                </div>
<?php
}
wp_reset_postdata();
?>
                
            
                    <div class="pager">
<?php if (function_exists('wp_corenavi')) wp_corenavi(); ?>

                    </div>
			</div>
<?php get_sidebar(); ?>
		</main>
<?php get_footer(); ?>
	</div>
<?php wp_footer(); ?>
</body>
</html>

Код functions.php
<?php

/**
 * Загружаемые скрипты и стили
 */
function load_style_script(){
	wp_enqueue_style('style', get_template_directory_uri() . '/style.css');
    wp_enqueue_style('font-awesome', get_template_directory_uri() . '/css/font-awesome.css');
    wp_register_style('font-style', 'https://fonts.googleapis.com/css?family=Old+Standard+TT:400,700|Roboto:400,500,700&amp;subset=cyrillic');
    wp_enqueue_style('font-style');
    
}

/**
 * Загружаем скрипты и стили
 */
add_action('wp_enqueue_scripts', 'load_style_script');

/**
 * Длина обрезвемого текста поста (в словах)
 */
add_filter( 'excerpt_length', function(){
	return 40;
} );

/**
 * Поддержка миниатюр
 */
add_theme_support('post-thumbnails');
set_post_thumbnail_size(180,180);

/**
 * Пагенация
 */
function wp_corenavi(){
  global $wp_query;
  $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'] = '&laquo;'; //текст ссылки "Предыдущая страница"
  $a['next_text'] = '&raquo;'; //текст ссылки "Следующая страница"

  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>';
}

?>

  • Вопрос задан
  • 257 просмотров
Решения вопроса 1
azerphoenix
@azerphoenix
Java Software Engineer
Простое решение - dimox.name/wordpress-pagination-without-a-plugin
Пример реализации -
https://md7.info/surgery
https://reporter.by/belarus

Лучше используйте циклы query_posts или WP_Query

А вы не разделили шаблон на footer.php & header.php ? Как я вижу у вас wp_footer() находится в том же шаблоне, где он вызывается...

Готовый рабочий код:

Добавьте в functions:
function wp_corenavi(){
  global $wp_query;
  $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'] = '&laquo;'; //текст ссылки "Предыдущая страница"
  $a['next_text'] = '&raquo;'; //текст ссылки "Следующая страница"

  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>';
}


Добавьте стили:
/* pagination */
.navigation {
    display: block;
    text-align: center;
    margin: 20px auto;
}
.pages {
    padding: 5px 7px;
    color: #fff;
    background: #333;
}
.page-numbers {
    background: #333;
    padding: 5px 7px;
    color: #fff !important;
    
}
.page-numbers.current {
    text-decoration: underline;
}
.page-numbers:hover {
    text-decoration:none;
    opacity: 0.8;
}


Добавьте код вывода пагинации в цикл:
<?php if (have_posts()) :  while (have_posts()) : the_post(); ?>
	<? //здесь ваш контент ?>
<?php endwhile; ?>
<?php if (function_exists('wp_corenavi')) wp_corenavi(); ?>
<?php endif; ?>

P.S. не забудьте передать ваши аргументы $args
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
https://github.com/talentedaamer/Bootstrap-wordpre...
Вот отличное решение для пагинации. Работает идеально и очень гибко настраивается.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы