✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Таксономии WordPress: термины, родители, дети

79

Программное создание таксономий, похоже, время от времени возникает у тех, кто создает решения для других на WordPress.

Сами таксономии могут даже немного сбивать с толку; однако я обнаружил, что следующее обычно помогает немного укрепить концепцию:

Иерархические таксономии аналогичны категориям; неиерархические таксономии аналогичны тегам.

Но все же, предположим, что вы создаете решение для кого-то, что вам нужно импортировать информацию в виде публикации и применить к ней таксономию. Кроме того, возможно, вы также захотите применить родительскую таксономию к публикации.

Как мы можем сделать это?

Таксономии WordPress: регистрация, родители, дети и многое другое

Ситуация примерно такая:

У вас есть сообщение, к которому будет применена таксономия. Если у таксономии есть родитель, мы также хотим применить его к посту.

Для этого нам понадобятся четыре (может быть, пять) функций:

  1. register_taxonomy
  2. wp_insert_term
  3. get_term_by
  4. wp_set_object_terms

Я также добавлю, что я считаю хорошей идеей использовать sanitize_title_with_dashes, если вы собираетесь использовать какой-то тип недезинфицированной входящей строки для слага типа сообщения (но это не обязательно, если вы, конечно, не ).

1 Зарегистрируйте таксономию

В этом примере мы собираемся создать таксономию для пользовательского типа записи.

Поскольку это может быть что угодно, с чем вы работаете, я буду использовать переменную с именем $postType, чтобы продемонстрировать суть.

<?php

register_taxonomy(
  'acme-category',
  $postType,
  [
      'label' => 'Acme Categories',
      'rewrite' => ['slug' => 'acme-category'],
      'capabilities' => [
          'manage_terms' => 'manage_options',
          'edit_terms' => 'manage_options',
          'delete_terms' => 'manage_options',
          'assign_terms' => 'manage_options',
      ],
      'hierarchical' => true,
  ]
);

Это достаточно просто, но обратите внимание на ссылку на код :

Простая функция для создания или изменения объекта таксономии на основе заданных параметров. При изменении существующего объекта таксономии обратите внимание, что $object_typeзначение из исходной регистрации будет перезаписано.

Как правило, это не проблема, но если вы работаете над большим приложением или уже существующим приложением, об этом следует помнить.

2 Вставьте термин для таксономии

Далее предположим, что  вам доступен $customPost, и у него есть функция для получения его имени, заголовка или какого-либо другого свойства, используемого для его идентификации (кроме идентификатора).

Это можно передать в функцию или сделать доступным через любое использование других функций, предоставляемых WordPress. В этом примере я буду использовать функцию getName() для объекта $customPost .

<?php

$termInfo = wp_insert_term(
  $customPost->getName(),
  'acme-category',
  ['slug' => sanitize_title_with_dashes($customPost->getName())]
);

Обратите внимание, что я также читаю результат функции в  переменную $termInfo. Мы будем использовать это на следующем шаге, чтобы найти родителя, если он существует, а также применить его к нашему пользовательскому объекту записи.

3 Найдите родителя термина

Здесь мы будем использовать только что созданный термин, чтобы увидеть, существует ли для него родитель. Обратите внимание, что если он возвращает false, то таксономия не существует (или термин не найден).

Таксономии WordPress: термины, родители, дети

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

<?php

$parentTermInfo = get_term_by(
  'term_taxonomy_id',
  $termInfo['term_taxonomy_id'],
  'acme-category',
  ARRAY_A
);

Обратите внимание, что я сохраняю результат приведенного выше кода в  переменной $parentTermInfo. Это сделано для того, чтобы мы могли передать это нашей последней функции для применения родительской информации к нашему объекту записи.

4 Применение термина к сообщению

Наконец, мы применим термин (или термины), если есть родительский объект. Напомним, что здесь понадобится условное выражение. Проще говоря, если родителя нет, то значение $parentTermInfo[‘parent’] не понадобится.

Таксономии WordPress: термины, родители, дети

Но для приведенного ниже кода мы предполагаем, что он у нас есть.

<?php

wp_set_object_terms(
  $customPost->getId(),
  [
      $parentTermInfo['parent'],
      $termInfo['term_id'],
  ],
  'acme-category',
  true
);

Из ссылки на код обратите внимание, что это создаст термин, если он еще не существует; в противном случае он будет использовать то, что уже определено, и применит его к сообщению.

Готово

В общем, работы не так много. Это помогает убедиться, что у вас есть четкое понимание того, как работают таксономии и их термины. Кроме того, это также помогает узнать, как получить родителя данного термина, если это то, что вы хотите сделать (в противном случае третий шаг не требуется).

Но, надеюсь, приведенные выше ссылки и код предоставят вам все необходимое для создания таксономии и применения ее к сообщению (а также к родительскому термину, если это необходимо).

Источник записи: tommcfarlin.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее