Поддержка Проблемы и решения 2 разные категории в записи

  • Здравствуйте Уважаемое сообщество.
    Ни скажете как можно сделать 2 разные категории в записи.
    Например любая запись отсюда
    Для записи
    Создаём абстрактное золотое кольцо в Фотошоп
    мы имеем
    рубрику — Эффекты и
    сложность — лёгкая

Просмотр 13 ответов — с 16 по 28 (всего 28)
  • davidtm
    давайте рассмотрим 3 вариант, чтобы ID категорий к которым относится запись выводилась в массиве.
    Для сложности есть
    рубрика сложность (complication)
    для рубрики сложность есть 3 подрубрики
    — Легкая (the-easy)
    — Средняя (average)
    — Усложненная (the-complicated)
    Визуально портал выгледит так
    1 запись относится к 2 категориям (Эффекты и (Легкая или Средняя или Усложнённая))
    Для вывода категории в левом сайдбаре использую этот участок кода

    <?php wp_list_categories('show_option_all=1&show_count=1&hide_empty=0&orderby=ID&order=asc&title_li=0');
    							?>

    Для вывода надписи категорий в записи (на рисунки они светло зеленого цвета) использую этот участок кода

    <h2><?php
    								if (!is_page()) {
    								   echo '<span>рубрика: </span> ';
    								   the_category(', ');
    								   echo '  <span>|</span>   ';
    								   }
    ?>

    Какой участок кода можно использовать чтобы чтобы ID категорий к которым относится запись выводилась в массиве? (то что Вы предлагали для вывода сложности)?

    Ну например так:

    $cat = get_the_category();
    $category = $cat[0];
    $level = $cat[1];

    Немного поясню. написанный выше код, будет получать id категории в которой находится запись, в нашем случае в двух. Эти категории записываются в массив. Переменной $cat присваиваем этот массив и выдергиваем из массива по элементу, присваивая их к новым переменным.

    В связке с Вашим кодом пример:

    <?
      $cat = get_the_category();
      $category = $cat[0];
      $level = $cat[1];
    
      if (!is_page()) {
      echo '<span>рубрика:'.$category.'</span>';
      echo '<span>сложность:'.$level.'</span>';
    }
    ?>

    Но усвойте вот что:
    Когда создаете категории, то они сортируются, если память мне не изменяет, по дате создания, то есть категория созданная позже(более новая) всегда в массиве будет первой стоять.
    Т.е. если вы создали категорию эффекты раньше чем уровень сложность, то в массиве под индексом 0 будет категория уровень сложности, а под 1 — эффекты, и наоборот.

    Использовал Ваш код
    ругается на строку echo '<span>рубрика:'.$category.'</span>';
    Catchable fatal error: Object of class stdClass could not be converted to string in
    Я шаблон с нуля делал может что в файле functions.php по $cat = get_the_category(); нужно описать?

    Скажите а по стуктуре категорий как лучше сделать
    Создать категорию Категории и в ней подкатегории Эффекты, Работа с фото, …
    И создать категорию Сложность и в ней подкатегории Легкая, средняя, усложненная.
    Сейчас у меня категория Эффекты без родителя, а сложность имеет подкатегории.

    Писал на память, что помнил, а вообще я забыл указать что вытаскивать из массива поэтому он и выдал ошибку

    Выведет название категории:
    $category = $cat[0]->cat_name;

    Выведет id категории:
    $category = $cat[0]->term_id;

    Вот еще список всего того что можно вывести

    cat_ID
    the category id (also stored as ‘term_id’)
    cat_name
    the category name (also stored as ‘name’)
    category_nicename
    a slug generated from the category name (also stored as ‘slug’)
    category_description
    the category description (also stored as ‘description’)
    category_parent
    the category id of the current category’s parent. ‘0’ for no parents. (also stored as ‘parent’)
    category_count
    the number of uses of this category (also stored as ‘count’)

    более подробно тут

    По поводу структуры категорий — это уже Вы сами делайте так как удобно Вам. В каждом проекте нужды разные, соответственно и вывод разный

    Спасибо большое все работает.

    Хотел начать новую тему, но модератор её закрыл,
    Ни подскажете с вопросом

    Мне для записи нужно вывести 2 категории.
    Для этого в файле main.php использую следующий код
    По вариантам вывода рубрик

    <?php
    $category = get_the_category();
    if($category[0]){
    echo '<a href="'.get_category_link($category[0]->term_id ).'">'.$category[0]->cat_name.'</a>';
    }
    ?>

    это для 1 категории и

    <?php
    $category = get_the_category();
    if($category[1]){
    echo '<a href="'.get_category_link($category[1]->term_id ).'">'.$category[1]->cat_name.'</a>';
    }
    ?>

    этот код для другой категории
    1 категория Рубрика (для неё есть подрубрики — эффекты, работа с текстом, работа с фото, анимация)
    2 категория Сложность (для неё подрубрики — легкая, средняя, усложнённая)

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

    рубрика легкая
    запись 1
    сложность эффекты

    рубрика эффекты
    запись 2
    сложность лёгкая

    Вывод записи 1 идёт с ошибкой (в рубрике не должно быть легкая, средняя или усложнённая)

    Если смотреть по алфавиту
    1-а анимация
    2-л лёгкая
    3-р работа с текстом
    работа с фото
    4-с средняя
    5-у усложнённая
    6-э эффекты

    Чтоб сделать правильный вывод подкатегорий нужно их сортировать,
    Как это можно сделать?

    Нет ли у Вас каких либо идей, или предложений?

    Честно говоря, запутался между сложной и усложненной…
    Сортировка по имени есть у wp_get_post_terms и wp_get_object_terms.
    Еще можно проверить, является ли категория дочерней от конкретной другой, используя $category->parent. Если является — печатать.

    Участок кода не дадите?

    Если я правильно понял…

    $categories = get_the_category();
    $sep = '';
    foreach ($categories as $category) {
        if ($category->category_parent == 1)
            echo $sep . '<a href="'.get_category_link($category->term_id ).'">'.$category->cat_name.'</a>' ;
            $sep = ', ';
    }

    1 — ID родительской категории, заменить на актуальный.

    Спасибо за код всё работает

    upd добавил разделитель — запятую $sep, если категорий больше одной.

Просмотр 13 ответов — с 16 по 28 (всего 28)
  • Тема «2 разные категории в записи» закрыта для новых ответов.