Задать вопрос
@MyQuestion
junior-middle fullstack

Обновляю посты по расписанию. Через wp_insert_post, но не добавляются таксономии в tax_input, почему?

Добрый день!

Я получаю посты в json формате, и закидываю их кастомный тип поста

$post_data = array(
          // 'ID'                => $id,
          'comment_status'    => 'closed',
          'post_content'      => $jobContent,
          'ping_status'       => 'closed',
          'post_author'       => $author_id,
          // 'post_date'         => $gtm,
          'post_name'         => $title,
          'post_title'        => $title,
          'post_status'       => 'publish',
          'tax_input'      => ['department' => $departmentsTags ? $departmentsTags : '', 'location' => $officesTags ? $officesTags : ''],
          'post_type'         => 'careers',
          'meta_input'        =>  ['job_id2' => $id],
        );

        kses_remove_filters();
        $post_ID = wp_insert_post($post_data);
        kses_init_filters();


У меня два способа активации, по кнопке и отложенный вариант "два раза в день" через wp_next_scheduled. По кнопке отрабатывает без нареканий. Отложенный вариант, запускает ту же функцию, но не может закинуть в готовую таксономию термины. Т.е. создаёт посты без терминов.

Сами таксономии создаются плагином jet engine, как и кастомный тип записи. Не спрашивайте почему ) Такое у меня условие )

Почему в отложенном варианте, я не могу закинуть термины в таксономии? Есть у кого идеи?

Возможно стоит упомянуть, что перед тем, как я закину новые посты, я удаляю старые, вот так:
$params = array(
    'posts_per_page' => -1, 
    'post_type'  => 'careers' 
  );
  $q = new WP_Query($params);
  if ($q->have_posts()) : 
    while ($q->have_posts()) : $q->the_post();
      wp_delete_post($q->post->ID, true); 
    endwhile;
  endif;
  wp_reset_postdata();


Возможно это не лучшее решение, но в текущей ситуации, меня это устраивает.
  • Вопрос задан
  • 28 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@techkiller
Привет!
Твоя проблема с добавлением таксономий через `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. Проверка прав: Удостоверься, что задачи по расписанию запускаются с правами пользователя, который имеет возможность редактировать посты и таксономии.

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

Войдите, чтобы написать ответ

Похожие вопросы