Количество тегов на странице и пагинация
Есть страница с кодом для вывода тегов с превью изображениями.
Выводится кодом
<?php foreach (get_terms('post_tag') as $cat) : ?>
Как возможно ограничить вывод по кол-ву тегов на 1 страницу, и сделать пагинацию?
Например вот так
Вы показали строку
<?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(); ?>Выдает ошибку
Я вижу синтаксическую ошибку на строчке закрытия цикла, вот вы открываете цикл
<?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 страницы. Если запретить вывод "пустых" тегов через
То 3-я страница есть в пагинации, но она пустая, без тегов. Т.е. она появляется только из-за общего кол-ва тегов.
Возможно запретить вывод таких пустых страниц?
Сейчас пагинация выглядит так https://prnt.sc/h_spewSCpght
На всем сайте она подключается одним тегом
И ссот-но везде выглядит одинаково 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();Как возможно эту общую пагинацию вставить в станицу с тегами, что бы не плодить отдельные стили для нее?
Наверняка обернута в какой то блок и для него заданы какие то стили. Если бы я видел сайт я бы сразу сказал, а так вам надо будет разбиратся самому
Сайт на локале (
В любом случае, спасибо за помощь!
Роман, сделайте вопрос решенным если мы победили вашу ситуацию