Вывод тегов WordPress в несколько колонок в алфавитном порядке

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

Для начала нужно создать шаблон страницы, назовем его template-tags.php

Далее вставьте в него следующий код:

<?php
/*
Template Name: Теги
*/

get_header(); ?>

<div id="content">

    <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>

        <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

            <div class="hentry-meta">
                <h1><?php the_title(); ?></h1>
            </div>

            <div class="hentry-content clear">
                <div class="tags">
                    <?php
                        $tags = get_tags('orderby=name&order=ASC');
                        $capital = '';
                        $i = 0;
						$cols_number = 4; // Количество колонок
                        $cut = ceil( count($tags)/$cols_number );
                        $cutter = $cut;
                        $letter_i = 0;
                        $output = '<div class="column">';
                        foreach ( $tags as $tag ) {
                            $i++;
                            $firstletter = mb_substr($tag->name, 0, 1);
                            if ( $firstletter !=  $capital ) {
                                $letter_i++;
                                if ( $letter_i != 1 ) $output .= '</ul>';
                                if ( $i > $cutter ) {
                                    $output .= '</div><div class="column">';
                                    $cutter = $cutter + $cut;
                                }
                                $capital = $firstletter;
                                $output .= '<h4>' . $capital . '</h4><ul>';
                            }
                            $term = get_term_by('id', (int)$tag->term_id, 'post_tag');
                            $output .= '<li><a href="' . get_term_link( (int)$tag->term_id, 'post_tag' ) . '">' . $tag->name . '</a> (' . $term->count . ')</li>';
                        }
                        echo $output . '</ul></div>';
                    ?>
                </div>
            </div>

        </div> <!-- .page -->

    <?php endwhile; // end of the loop. ?>

</div><!-- #content -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Структура страницы вашей темы отличается от моего примера, поэтому вам нужно будет скорректировать его, например, посмотрите код вашего page.php. Вся логика вывода тегов находится в блоке с классом tags.

Добавим стили, вставьте их в ваш styles.css:

/***** Tags *****/

.clear:after {content: "."; display: block; height: 0; clear: both; visibility: hidden;}
* html .clear {zoom: 1; clear: both;}
*+html .clear {zoom: 1; clear: both;}
.page-template-template-tags-php h4 {font-weight: bold; text-transform: uppercase;}
.page-template-template-tags-php .hentry-content {width: 620px; overflow: hidden;}
.page-template-template-tags-php .hentry-content .tags {width: 640px;}
.page-template-template-tags-php .hentry-content ul {list-style: none; margin: 0 0 15px 0;}
.page-template-template-tags-php .hentry-content ul li {color: #898989;}
.page-template-template-tags-php .hentry-content .column {width: 140px; float: left; margin-right: 20px;}

Опять же, поправьте стили, учитывая ваш шаблон.

Теперь осталось только создать статическую страницу и назначить ей шаблон Теги. Должно получится примерно вот так, как на скриншоте:

Метки: , , ,

Комментарии

  1. art 08.12.2011 в 17:33 #

    красиво получилось

  2. Shershov 09.12.2011 в 16:12 #

    Спасибо! Забираю в закладки.

  3. AggreSSor 20.01.2012 в 22:51 #

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

  4. Rama 30.01.2012 в 15:48 #

    Спасибо. Все получилось

  5. Марио 25.02.2012 в 21:28 #

    Интересная и удобная вещь. Спасибо!

  6. oktano 28.02.2012 в 00:10 #

    Я хотел бы узнать, а есть ли плагин подобного действия, только для вывода не тегов, а всех категорий на отдельной странице, с такой же разбивкой по колонкам? За пример с тегами большое спасибо.

    • Neolot 28.02.2012 в 10:32 #

      Насчет плагина не знаю, проще этот код модифицировать для категорий

  7. oktano 29.02.2012 в 01:56 #

    Спасибо за ответы, только они мало помогают, так как односложные )). Резонный вопрос, как переделать, чтобы из тегов стали выводится категории? Если не сложно и есть свободное время, то напишите, пожалуйста, код. Сам бы мог — не спрашивал бы ))

    Второй вопрос. У меня есть категория, в ней есть подкатегории. Нужно сделать так, чтобы в главной категории выводился список всех подкатегорий с разбивкой на произвольное кол-во колонок (как например вот тут m0006.gamecopyworld.com/g...cw_index_2.shtml). Шаблон категории основной будет сменен на уникальный, в него вставлен код вывода все подкатегорий главной категории. Подскажите, как это сделать, или лучше код напишите. Если сложно и требует больших физ. и умственных затрат — огласите цену, можно на мыло. Спасибо.

  8. Акулов 13.05.2012 в 13:57 #

    oktano, я как раз этим сейчас занимаюсь, нужна помощь — пиши.

Ваше мнение

Если вам нужно вставить код, оберните его в специальный шорткод [php], [html], [css], [js].
Например: [js]Ваш код[/js]