Как вывести список категорий

8 февр. 2014 г., 09:25:19
Просмотры: 60.6K
Голосов: 3

Я пытаюсь настроить список категорий с кликабельными ссылками на эти категории. Я просмотрел:

и не совсем уверен, куда поместить код или как получить к нему доступ на странице.

Я достаточно хорошо понимаю PHP - он довольно прост, просто я относительно новичок в WP и мне нужна помощь с реализацией.

1
Комментарии

Оберните код, который вы получили по ссылке выше, в функцию и добавьте его в файл functions.php, затем используйте эту функцию где угодно с помощью хуков, шорткода или в файле шаблона.

gmatta gmatta
4 янв. 2019 г. 10:20:40
Все ответы на вопрос 5
0

Я покажу вам, как вывести список категорий в WordPress и пометить активную категорию, смотрите код ниже:

<?php
// Получаем текущий запрашиваемый объект
$term    = get_queried_object();
$term_id = ( isset( $term->term_id ) ) ? (int) $term->term_id : 0;

$categories = get_categories( array(
    'taxonomy'   => 'category', // Таксономия для получения терминов. Мы используем 'category'. Этот параметр по умолчанию 'category', поэтому его можно опустить
    'orderby'    => 'name',
    'parent'     => 0,
    'hide_empty' => 0, // измените на 1, чтобы скрыть категории без записей
) );
?>

<ul>
    <?php
    foreach ( $categories as $category ) 
    {
        $cat_ID        = (int) $category->term_id;
        $category_name = $category->name;

        // При просмотре конкретной категории добавляем класс [active]
        $cat_class = ( $cat_ID == $term_id ) ? 'active' : 'not-active';

        // Я не люблю показывать категорию [uncategorized]
        if ( strtolower( $category_name ) != 'uncategorized' )
        {
            printf( '%3$s',
                esc_attr( $cat_class ),
                esc_url( get_category_link( $category->term_id ) ),
                esc_html( $category->name )
            );
        }
    }
    ?>
</ul>

Примечания к коду выше:

get_queried_object() получает текущий запрашиваемый объект. Например:

  • если вы на странице записи, вернётся объект записи
  • если вы на странице, вернётся объект страницы
  • если вы в архиве, вернётся объект типа записи
  • если вы в архиве категории, вернётся объект категории
  • если вы в архиве автора, вернётся объект автора
  • и т.д.

Но есть нюансы при использовании get_queried_object(), не стоит ожидать, что он вернёт объект типа записи, даже если is_post_type_archive() возвращает true. Проверьте это для получения дополнительной информации.

Также обратите внимание, что get_queried_object() является обёрткой для $wp_query->get_queried_object(), поэтому возвращает тип данных WP.

get_categories()

get_categories() получает список объектов категорий. Принимает только один параметр - $args. Параметр $args задаёт список аргументов для получения категорий. Смотрите get_terms() для дополнительных опций.

Однако, чтобы получить категории для конкретной записи, вот простая функция, которую я написал: Как получить список категорий для записи

4 янв. 2019 г. 09:25:14
0

Как указано в связанной ветке WPSE и принятом ответе, код выглядит следующим образом (скопировано и вставлено):

$categories =  get_categories('child_of=31');  
foreach  ($categories as $category) {
    // Отображаем информацию о подкатегории, используя значения $category, такие как $category->cat_name
    echo '<h2>'.$category->name.'</h2>';
    echo '<ul>';

    foreach (get_posts('cat='.$category->term_id) as $post) {
        setup_postdata( $post );
        echo '<li><a href="'.get_permalink($post->ID).'">'.get_the_title().'</a></li>';   
    }  
    echo '</ul>';
}

Для нас (разработчиков WordPress) Кодекс является ключом к большинству базовых вещей. Согласно WordPress Codex:

  • get_categories() выполняет запрос для всех категорий сайта и возвращает массив.
  • Аналогично get_posts() выполняет запрос для всех записей сайта и возвращает массив.

Оба этих метода являются сокращёнными версиями WP_Query(). Все возможные параметры для них можно найти на страницах Кодекса. Поскольку вы увлекаетесь PHP, вы понимаете, как работает код: переменная $categories получает все категории, и для каждой категории get_posts() получает её записи.

Это очень похоже на запрос mySQL и цикл foreach в чистом PHP. Вы можете поместить этот код в любую из шаблонных страниц активной темы вашего сайта WordPress. Иерархия шаблонов может дать вам более детальное понимание.

Поскольку заголовок вашего вопроса звучит так:

Как отобразить список категорий

Ответ может быть следующим:

$categories =  get_categories();
echo '<ul>';
foreach  ($categories as $category) {
  echo '<li>'. $category->cat_name .'</li>';
}
echo '</ul>';

Я не совсем уверен, куда вставить этот код или как получить к нему доступ на странице.

Я уже говорил: попробуйте вставить код в index.php, front-page.php или куда угодно. Ключевая концепция заключается в том, что это просто SQL-запрос и полезный цикл foreach на PHP.

8 февр. 2014 г. 11:01:16
0

Этот метод позволяет исключить любую категорию, просто добавив её ID в код.

Вот более удобный способ условного вывода списка категорий из файла функций вашей дочерней темы в любом хуке WordPress или конкретной темы:

add_filter( 'the_content', 'wpsites_list_cats' );
function wpsites_list_cats($content) {
if( is_singular('post') && is_main_query() ) {
$args = array(
'orderby' => 'name',
'exclude' => '',
'include' => '',
'parent' => 0
);
$categories = get_categories( $args );
echo'<nav id="primary-navigation" class="primary-navigation" role="navigation">';
foreach ( $categories as $category ) {
echo '<li><a href="' . get_category_link( $category->term_id ) . '">' .  $category->name . '</a></li>';
}
echo'</nav>';
return $content;
    }
}

Вот результат:

Результат вывода списка категорий

А вот результат, если вы хотите использовать существующие стили навигационных меню из темы Twenty Fourteen, которые включены в приведённый выше код.

Результат со стилями Twenty Fourteen

Код также позволяет включать определённые категории или исключать любые, используя их ID.

Вы также можете создать пользовательскую область виджетов и использовать стандартный виджет категорий WordPress.

Просто измените хук the_content, чтобы поменять расположение списка категорий.

Модифицировано из этого источника

8 февр. 2014 г. 17:32:56
0

Или используйте плагин List Categories с его собственным настраиваемым шорткодом, который работает как ярлык для wp_list_categories( array|string $args = '' ) функции.

Вы можете настроить его аргументы, как описано в документации.

18 июл. 2023 г. 18:29:28
0

Самый простой способ добиться этого — использовать стандартный виджет категорий WordPress.

15 апр. 2024 г. 21:02:14