Лучший способ программно удалить категорию / термин из поста

8

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

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

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

Я также заинтересован в плагинах, которые могут сделать преобразование для меня, если кто-то знает один. Я не смог найти ничего, что могло бы сделать cat-> postmeta, в отличие от того, что может быть обработано плагином Scribu.

jerclarke
источник
Вы хотите сделать это через API, или это нормально делать с SQL-запросами? Это не будет слишком сложно, только один запрос, чтобы вставить новые значения postmeta, один, чтобы удалить отношения пост-категории, и, возможно, один, чтобы обновить счетчик категорий.
Ян Фабри
Я определенно хочу использовать API. Количество категорий и т. Д. Я не хочу учитывать в этом случае. Функция wp_get_object_terms () / wp_set_object_terms () уже позволит довольно легко манипулировать терминами, но я надеялся на однофункциональное решение из ядра.
Джеркларке

Ответы:

6

Хм, не могу вспомнить или найти подходящую функцию либо.

Существует wp_set_object_terms()то, что используется в нескольких обертках, как wp_set_post_categories(). Он может перезаписывать категории для поста.

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

Rarst
источник
На данный момент это лучшее решение, которое я, вероятно, буду использовать. get_object_terms () для получения, unset () тот, который мне не нужен, затем wp_set_object_terms () для повторного сохранения массива. Жаль, что нет wp_set_object_term () и wp_remove_object_term ().
Джеркларке
Вот как я это делал в прошлом. Это довольно неуклюже и изобилует улучшениями, но я полагаю, что это лучший шаблон.
редактор