Таможенная таксономия: те же условия, но для разных лет

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

  1. Номер комнаты
  2. Номер места для парковки
  3. Лидерские позиции

Уловка состоит в том, что каждый из них связан с конкретным годом , то есть:

  • В 2010 году Джон Смит живет в комнате 2, имеет парковочное место 5 и находится на домашнем совете.
  • В 2011 году Джон Смит живет в комнате 42, имеет парковочное место 1 и является лидером дома.

Кроме того, мне нужно иметь возможность просматривать людей в соответствии с этими свойствами , т. Е. Я хочу видеть список всех членов «домашнего совета» или всех людей, которые жили в Комнате 1.

Моя первоначальная идея заключалась в создании персонализированного типа сообщений «Резиденты» с пользовательской (иерархической) таксономией «Метаданные», которая имела бы следующие термины:

  • 2010
    • Комната
      • 40
      • 41
      • 42
      • и т.д
    • Парковочное место
      • 1
      • 2
      • 3
      • и т.д
    • руководство
      • Руководитель дома
      • Совет палаты представителей
      • Монитор раздела
  • 2011
    • Комната
      • (как указано выше)
    • Парковочное место
      • (как указано выше)
    • руководство
      • (как указано выше)

Хотя это позволит мне фильтровать жителей в зависимости от комнаты, места для парковки и руководства в конкретном году, я бы хотел, чтобы я мог фильтровать жителей по номеру комнаты на все годы, то есть: вместо просмотра всех жителей, которые жили в комнате 2 в 2010 году (это всего лишь случай фильтрации в соответствии с 2010 годом> Номер номера> 2), я хотел бы иметь возможность просматривать всех жителей, которые жили в Комнате 2 за последние 10 лет.

Это всего лишь случай поиска бокового виджета, который позволил бы мне выбрать конкретный подзаголовок из нескольких родительских терминов в таксономии «Метаданные» (например, выбрав «Комната 1» с «2010», «2011», «2012», и т. д.), или здесь есть большая архитектурная ошибка?

Пожалуйста, дайте мне знать, если я ничего не понял. Заранее спасибо!

Вы действительно могли бы достичь всего с категориями, но это хорошая идея? Если все основные категории – 2010, 2011, 2012, и каждый из них имеет подкатегории с именем Room1, Room2 и т. Д., У вас действительно будет простой способ сделать ваши поиски по годам или по комнате. Поиск по годам будет таким же простым, как запрос к соответствующей категории. Поиск по комнате подразумевал бы сначала создать массив или список кошачьих чисел, пропуская все категории, чтобы найти все категории с именем «Room1» или «Room2» на протяжении всех лет. Со списком в руках поиск будет очень легко выполнить.
Все это прекрасно и может быть реализовано быстро. Единственный страх, который у меня есть для вас, заключается в том, что это решение действительно взломано и не очень «логично», что позволяет вам адаптировать вашу модель данных. Во-первых: номера только назначаются каждый год? Не назначаются ли они периодами? Повторяющиеся категории, подобные этому, не являются чистым способом представления данных, потому что вы будете повторять информацию. Лучшей идеей было бы создание пользовательских типов сообщений для комнат, парковки и т. Д. И назначение их пользователям на каждый год, например, сопоставление года и объекта с помощью настраиваемого поля. Все пользовательские поля имеют уникальные идентификаторы, используя тот же первичный ключ, что и сообщения, поэтому они всегда четко разделены. Таким образом, у вас вполне могут быть поля, ассоциирующие год и идентификатор объекта с чем-то вроде Y2010: F223 (223 – идентификатор места для парковки и т. Д.). Тогда было бы легко выполнить поиск с использованием пользовательских значений полей (поиск Y2010, Y2011 или F21 и т. Д.).

Это можно сделать с помощью пользовательской таксономии, которую вам просто нужно создать, создать три таксономии «Год», «Комнаты» и «Место для парковки», а затем вы можете фильтровать результаты по любой ценности в вас query_posts

add_action('init', 'custom_taxonomy'); function custom_taxonomy(){ register_taxonomy("years", 'post_type_slug', array("hierarchical" => true, "label" => "Years", "singular_label" => "Years","rewrite" => true) ); register_taxonomy("rooms", 'post_type_slug', array("hierarchical" => true, "label" => "Rooms", "singular_label" => "Rooms","rewrite" => true) ); register_taxonomy("parking", 'post_type_slug', array("hierarchical" => true, "label" => "Parkings", "singular_label" => "Parking","rewrite" => true) ); }