WP_SET_POST_CATEGORIES() Function Explained: Usage, Hooks and Examples

## WP_SET_POST_CATEGORIES() │ WP 2.1.0

Функция для установки категорий для записи.

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

### Изучаем функцию

Функция использует: wp_set_post_terms() для установки категорий.

### Хуки функции

- default_category_post_types — используется для фильтрации постов, которые требуют категорию по умолчанию.

### Возвращаемое значение

Функция возвращает массив идентификаторов категорий, если всё прошло успешно. В случае ошибки возвращается WP_Error или false.

### Использование функции

Вот как выглядит вызов функции:

```php
wp_set_post_categories( $post_id, $post_categories, $append );
  • $post_id (int) — Идентификатор записи. Не используется ID глобальной переменной $post.
  • $post_categories (int[]|int) — Массив идентификаторов категорий или ID одной категории.
    • По умолчанию: пустой массив.
  • $append (true|false) — Если true, существующие категории не удаляются, а добавляются. Если false, новые категории заменяют старые.
    • По умолчанию: false.

Примеры использования

Пример 1: Перемещение записи из одной категории в другую

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

wp_set_post_categories( $post_id, [ 123 ] );

Изменения

  • С версии 2.1.0 — Функция была введена в WordPress.

Код функции

Вот как выглядит сама функция:

function wp_set_post_categories( $post_id = 0, $post_categories = array(), $append = false ) {
    $post_id = (int) $post_id;
    $post_type = get_post_type( $post_id );
    $post_status = get_post_status( $post_id );

    // Если $post_categories не массив, преобразуем его.
    $post_categories = (array) $post_categories;

    if ( empty( $post_categories ) ) {
        $default_category_post_types = apply_filters( 'default_category_post_types', array() );

        // Для обычных постов требуется категория по умолчанию.
        $default_category_post_types = array_merge( $default_category_post_types, array( 'post' ) );

        if ( in_array( $post_type, $default_category_post_types, true )
            && is_object_in_taxonomy( $post_type, 'category' )
            && 'auto-draft' !== $post_status
        ) {
            $post_categories = array( get_option( 'default_category' ) );
            $append = false;
        } else {
            $post_categories = array();
        }
    } elseif ( 1 === count( $post_categories ) && '' === reset( $post_categories ) ) {
        return true;
    }

    return wp_set_post_terms( $post_id, $post_categories, 'category', $append );
}

Связанные функции

Некоторые полезные функции, которые могут вам помочь:

  • get_object_taxonomies() — Получает таксономии для объекта.
  • get_the_category() — Возвращает категории записи.
  • has_category() — Проверяет, есть ли у записи заданная категория.
  • wp_delete_object_term_relationships() — Удаляет связь объекта с терминами.

Эти функции могут помочь вам работать с категориями и другими таксономиями в WordPress, упрощая управление контентом.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *