WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Количество тегов на странице и пагинация

Есть страница с кодом для вывода тегов с превью изображениями.
Выводится кодом

<?php foreach (get_terms('post_tag') as $cat) : ?>

Как возможно ограничить вывод по кол-ву тегов на 1 страницу, и сделать пагинацию?

1
Роман
год назад 23
  • 6
    Dan Zakirov578 air-wp.com

    Например вот так

    $tags_per_page = 5; // Количество тегов на страницу
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; // Получение текущей страницы пагинации
    
    $args = array(
    	'taxonomy' => 'post_tag',
    	'orderby' => 'name',
    	'order' => 'ASC',
    	'hide_empty' => false,
    	'number' => $tags_per_page,
    	'offset' => ( $paged - 1 ) * $tags_per_page // Вычисление смещения для текущей страницы
    );
    
    $terms = get_terms( $args ); ?>
    
    <?php foreach ($terms as $cat) : ?>
    
    	// тут содержимое
    
    <?php } ?>
    
    // Вывод пагинации
    echo paginate_links( array(
    	'base' => get_pagenum_link( 1 ) . '%_%',
    	'format' => 'page/%#%',
    	'current' => $paged,
    	'total' => ceil( wp_count_terms( 'post_tag' ) / $tags_per_page )
    ) );

    Вы показали строку <?php foreach (get_terms('post_tag') as $cat) : ?> - это начало цикла, смысл, что в get_terms() требуется передать дополнительные аргументы

    Роман год назад

    Полный код такой

    <?php foreach (get_terms('post_tag') as $cat) : ?>
    <article class="item movies" id="selection">
    	<div class="poster" id="selection_poster">
    		<img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" alt="" />
    		<div class="season_m animation-1">
    			<a href="<?php echo get_term_link($cat->slug, 'post_tag'); ?>" title="Коллекция: <?php echo $cat->name; ?>"><div class="see play3"></div></a>
    		</div>
    		<?php if($mostrar = get_the_term_list( $post->ID, 'dtquality')) {  ?><span class="quality"><?php echo strip_tags($mostrar); ?></span><?php } ?>
    	</div>
    	<div class="data">
    		<h3><a href="<?php echo get_term_link($cat->slug, 'post_tag'); ?>" title="Коллекция: <?php echo $cat->name; ?>"><?php echo $cat->name; ?></a></h3>
    	</div>
    </article>
    <?php endforeach; ?>

    Общий код страницы вместе с Вашим получился такой

    <?php
    /*
    Template Name: DT - Selection
    */
    
    get_header();
    $sidebar  = dooplay_get_option('sidebar_position_archives','right');
    $maxwidth = dooplay_get_option('max_width','1200');
    $maxwidth = ($maxwidth >= 1400) ? 'full' : 'normal';
    $tags_per_page = 5; // Количество тегов на страницу
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; // Получение текущей страницы пагинации
    
    $args = array(
    	'taxonomy' => 'post_tag',
    	'orderby' => 'name',
    	'order' => 'ASC',
    	'hide_empty' => false,
    	'number' => $tags_per_page,
    	'offset' => ( $paged - 1 ) * $tags_per_page // Вычисление смещения для текущей страницы
    );
    
    $terms = get_terms( $args ); ?>
    <div class="module"><div class="content full_width_layout normal">
    	<div id="archive-content" class="animation-2 items full">
    	<h1 class="heading-archive"><?php printf( __d('Подборки фильмов и сериалов %s'), '' . single_tag_title('', false ) . ''); ?></h1>
    <div class="desc_category">
    		<p><?php the_field('selection'); ?></p>
    	</div>
    <?php foreach ($terms as $cat) : ?>
    
    <article class="item movies" id="selection">
    	<div class="poster" id="selection_poster">
    		<img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" alt="" />
    		<div class="season_m animation-1">
    			<a href="<?php echo get_term_link($cat->slug, 'post_tag'); ?>" title="Коллекция: <?php echo $cat->name; ?>"><div class="see play3"></div></a>
    		</div>
    		<?php if($mostrar = get_the_term_list( $post->ID, 'dtquality')) {  ?><span class="quality"><?php echo strip_tags($mostrar); ?></span><?php } ?>
    	</div>
    	<div class="data">
    		<h3><a href="<?php echo get_term_link($cat->slug, 'post_tag'); ?>" title="Коллекция: <?php echo $cat->name; ?>"><?php echo $cat->name; ?></a></h3>
    	</div>
    </article>
    <?php } ?>
    	</div>
    	</div>
    </div>
    // Вывод пагинации
    <?php
    echo paginate_links( array(
    	'base' => get_pagenum_link( 1 ) . '%_%',
    	'format' => 'page/%#%',
    	'current' => $paged,
    	'total' => ceil( wp_count_terms( 'post_tag' ) / $tags_per_page )
    ) );
     ?>
    <?php get_footer(); ?>

    Выдает ошибку

    На сайте возникла критическая ошибка.

    Dan Zakirov год назад

    Я вижу синтаксическую ошибку на строчке закрытия цикла, вот вы открываете цикл <?php foreach ($terms as $cat) : ?> а так вот закрываете <?php } ?> - это неправильно. Если формат у ваc php такой, то закрыть нужно вот так <?php endforeach; ?>

    Вот правильный код, полностью:

    <?php
    /*
    Template Name: DT - Selection
    */
    
    get_header();
    $sidebar = dooplay_get_option('sidebar_position_archives', 'right');
    $maxwidth = dooplay_get_option('max_width', '1200');
    $maxwidth = ($maxwidth >= 1400) ? 'full' : 'normal';
    $tags_per_page = 5; // Количество тегов на страницу
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Получение текущей страницы пагинации
    
    $args = array(
    	'taxonomy' => 'post_tag',
    	'orderby' => 'name',
    	'order' => 'ASC',
    	'hide_empty' => false,
    	'number' => $tags_per_page,
    	'offset' => ($paged - 1) * $tags_per_page // Вычисление смещения для текущей страницы
    );
    
    $terms = get_terms($args); ?>
    	<div class="module">
    		<div class="content full_width_layout normal">
    			<div id="archive-content" class="animation-2 items full">
    				<h1 class="heading-archive"><?php printf(__d('Подборки фильмов и сериалов %s'), '' . single_tag_title('', false) . ''); ?></h1>
    				<div class="desc_category">
    					<p><?php the_field('selection'); ?></p>
    				</div>
    				<?php foreach ($terms as $cat) : ?>
    
    					<article class="item movies" id="selection">
    						<div class="poster" id="selection_poster">
    							<img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" alt=""/>
    							<div class="season_m animation-1">
    								<a href="<?php echo get_term_link($cat->slug, 'post_tag'); ?>"
    								   title="Коллекция: <?php echo $cat->name; ?>">
    									<div class="see play3"></div>
    								</a>
    							</div>
    							<?php if ($mostrar = get_the_term_list($post->ID, 'dtquality')) { ?><span
    									class="quality"><?php echo strip_tags($mostrar); ?></span><?php } ?>
    						</div>
    						<div class="data">
    							<h3><a href="<?php echo get_term_link($cat->slug, 'post_tag'); ?>"
    								   title="Коллекция: <?php echo $cat->name; ?>"><?php echo $cat->name; ?></a></h3>
    						</div>
    					</article>
    				<?php endforeach; ?>
    			</div>
    		</div>
    	</div>
    
    <?php 
    // Вывод пагинации
    echo paginate_links(array(
    	'base' => get_pagenum_link(1) . '%_%',
    	'format' => 'page/%#%',
    	'current' => $paged,
    	'total' => ceil(wp_count_terms('post_tag') / $tags_per_page)
    ));
    ?>
    <?php get_footer(); ?>
    Роман год назад

    Спасибо!
    Только появилось пару вопросов.
    Тегов получилось на 3 страницы. Если запретить вывод "пустых" тегов через

    'hide_empty' => true,

    То 3-я страница есть в пагинации, но она пустая, без тегов. Т.е. она появляется только из-за общего кол-ва тегов.
    Возможно запретить вывод таких пустых страниц?

    Сейчас пагинация выглядит так https://prnt.sc/h_spewSCpght
    На всем сайте она подключается одним тегом

    <?php doo_pagination(); ?>
    

    И ссот-но везде выглядит одинаково https://prnt.sc/u21orv1MOO9E
    Пробовал подключить этим же тегом, по всякому, но не отображается (
    Хотя на других подобных страницах есть пагинация, к примеру

    <?php
    /*
    Template Name: DT - Trending page
    */
    
    get_header();
    global $user_ID;
    $dt = isset( $_GET['get'] ) ? $_GET['get'] : null;
    $admin = isset( $_GET['admin'] ) ? $_GET['admin'] : null;
    if($dt == 'movies'):
    	$setion = array('movies');
    elseif($dt == 'tv'):
    	$setion = array('tvshows');
    else:
    	$setion = array('movies','tvshows');
    endif;
    doo_glossary();
    $maxwidth = dooplay_get_option('max_width','1200');
    $maxwidth = ($maxwidth >= 1400) ? 'full' : 'normal';
    echo '<div class="module">';
    echo '<div class="content right '.$maxwidth.'">';
    ?>
    <header>
    	<h1><?php _d('Trending'); ?></h1>
    	<span class="s_trending">
    		<a href="<?php the_permalink() ?>" class="m_trending <?php echo $dt == '' ? 'active' : ''; ?>"><?php _d('See all'); ?></a>
    		<a href="<?php the_permalink() ?>?get=movies" class="m_trending <?php echo $dt == 'movies' ? 'active' : ''; ?>"><?php _d('Movies'); ?></a>
    		<a href="<?php the_permalink() ?>?get=tv" class="m_trending <?php echo $dt == 'tv' ? 'active' : ''; ?>"><?php _d('TV Show'); ?></a>
    	</span>
    </header>
    <?php
    // Items
    echo '<div class="items '.$maxwidth.'">';
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    query_posts(array(
    	'post_type'    => $setion,
    	'post_status'  => 'publish',
    	'meta_key'     => 'dt_views_count',
    	'orderby'      => 'meta_value_num',
    	'order'        => 'DESC',
    	'paged'        => $paged
    ));
    while (have_posts()): the_post();
    	get_template_part('inc/parts/item');
    endwhile;
    echo '</div>';
    doo_pagination();
    echo '</div>';
    echo '<div class="sidebar right scrolling"><div class="fixed-sidebar-blank">';
    dynamic_sidebar('sidebar-home');
    echo '</div></div>';
    echo '</div>';
    get_footer();

    Как возможно эту общую пагинацию вставить в станицу с тегами, что бы не плодить отдельные стили для нее?

    Dan Zakirov год назад

    Наверняка обернута в какой то блок и для него заданы какие то стили. Если бы я видел сайт я бы сразу сказал, а так вам надо будет разбиратся самому

    Роман год назад

    Сайт на локале (
    В любом случае, спасибо за помощь!

    Dan Zakirov год назад

    Роман, сделайте вопрос решенным если мы победили вашу ситуацию

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация