Почему не удается добавить таксономии при использовании функции wp_insert_post?

Как можно исправить скрипт, чтобы при отложенной активации два раза в день корректно закидывались кастомные типы записей с таксономиями, в то время как при немедленной активации все работает как задумано?
  • 12 апреля 2024 г. 13:49
Ответы на вопрос 2
Возможно, проблема заключается в том, что вы пытаетесь добавить таксономии до того, как тип записи был создан. В таком случае, функция wp_insert_post не находит соответствующий тип записи и не может добавить таксономии к нему.

Для исправления этой проблемы вам нужно добавить условие, которое будет проверять, был ли создан тип записи перед добавлением таксономий. Например:

```php
// Проверяем, был ли тип записи создан
if ( post_type_exists( 'custom_post_type' ) ) {
    // Создаем новую запись
    $post_id = wp_insert_post( $post_data );

    // Если запись была успешно создана, добавляем к ней таксономии
    if ( $post_id ) {
        wp_set_object_terms( $post_id, 'taxonomy_term', 'taxonomy_name' );
    }
}
```

Этот код сначала проверяет существование типа записи `custom_post_type`, и только если он существует, создает новую запись и добавляет к ней таксономии.

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

```php
// Устанавливаем расписание для выполнения дважды в день
add_action( 'wp', 'my_schedule_custom_post_creation' );
function my_schedule_custom_post_creation() {
    if ( ! wp_next_scheduled( 'my_custom_post_creation_event' ) ) {
        wp_schedule_event( time(), 'twicedaily', 'my_custom_post_creation_event' );
    }
}

// Действие, которое будет выполняться при срабатывании расписания
add_action( 'my_custom_post_creation_event', 'my_custom_post_creation_function' );
function my_custom_post_creation_function() {
    // Ваш код для создания и добавления таксономий к кастомным типам записей
}
```

Таким образом, скрипт будет добавлять кастомные типы записей с таксономиями два раза в день при отложенной активации.
Привет! 
Твоя проблема с добавлением таксономий через `tax_input` при использовании функции `wp_insert_post` в запланированных задачах может быть связана с различиями в правах пользователя, которые действуют при выполнении функций по расписанию и при активации по кнопке.
По умолчанию, функция `wp_insert_post` не устанавливает таксономии, если она выполняется от пользователя, у которого нет прав на редактирование этих таксономий. Когда ты выполняешь добавление поста по кнопке, скорее всего, ты залогинен как администратор или другой пользователь с достаточными правами. Однако, когда операция выполняется в фоновом режиме по расписанию, она может запускаться от имени пользователя, у которого нет необходимых прав.
Чтобы решить эту проблему, можно попробовать следующие шаги:
1. Использование хуков: Перед вызовом `wp_insert_post`, применяй хук `wp_set_current_user` для временной смены текущего пользователя на администратора:

php
   wp_set_current_user(1); // 1 - это обычно ID администратора
   $post_ID = wp_insert_post($post_data);

Это позволит выполнять добавление постов с таксономиями с правами администратора, независимо от контекста вызова функции.
2. Добавление таксономий после создания поста: Иногда более надёжным решением может быть отдельное добавление таксономий после создания поста с помощью функции `wp_set_object_terms`:

php
   wp_set_object_terms($post_ID, $departmentsTags, 'department');
   wp_set_object_terms($post_ID, $officesTags, 'location');

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

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