wp_insert_post() или аналог для произвольного типа записи

18 июл. 2013 г., 14:09:06
Просмотры: 80.5K
Голосов: 8

Необходимо программно добавить записи произвольного типа. Не получается добавить используя стандартный метод

$id = wp_insert_post(array('post_title'=>'случайный', 'post_type'=>'custom_post'));

создает обычную запись вместо нужной.

3
Комментарии

Вы зарегистрировали custom post type с именем custom_post перед использованием этого вызова?

Rohit Pande Rohit Pande
18 июл. 2013 г. 14:32:44

да, он зарегистрирован

rashid rashid
18 июл. 2013 г. 14:56:08

неважно, он работает, была небольшая ошибка в файле, этот конкретный фрагмент кода правильный. просто замените 'custom_post' на нужный вам тип записи!

rashid rashid
18 июл. 2013 г. 15:02:55
Все ответы на вопрос 5
2
20

Это можно сделать с помощью следующего кода:

Для добавления новой записи пользовательского типа

$post_id = wp_insert_post(array (
   'post_type' => 'your_post_type',
   'post_title' => $your_title,
   'post_content' => $your_content,
   'post_status' => 'publish',
   'comment_status' => 'closed',   // если нужно
   'ping_status' => 'closed',      // если нужно
));

После добавления записи функция вернет ID записи. Если вам нужно добавить мета-данные для этой записи, можно использовать следующий код:

if ($post_id) {
   // добавляем мета-данные
   add_post_meta($post_id, '_your_custom_1', $custom1);
   add_post_meta($post_id, '_your_custom_2', $custom2);
   add_post_meta($post_id, '_your_custom_3', $custom3);
}
24 июн. 2014 г. 09:03:13
Комментарии

Параметр 'meta_input' можно использовать в массиве 'wp_insert_post' для добавления мета-полей, вместо последующего использования 'add_post_meta'.

AncientRo AncientRo
10 мар. 2019 г. 16:14:59

Спасибо за пост. @AncientRow, не могли бы вы привести пример с использованием meta_input?

Pegues Pegues
22 апр. 2020 г. 20:39:22
0
18

Из Codex:

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

$id = wp_insert_post(array(
  'post_title'=>'random', 
  'post_type'=>'custom_post', 
  'post_content'=>'demo text'
));
18 июл. 2013 г. 15:21:05
0

Этот пример сработал для меня с использованием meta_input

$post_id = wp_insert_post(array (
   'post_type' => 'your_post_type',
   'post_title' => $your_title,
   'post_content' => $your_content,
   'post_status' => 'publish',
   'comment_status' => 'closed',
   'ping_status' => 'closed',
   'meta_input' => array(
      '_your_custom_1' => $custom_1,
      '_your_custom_2' => $custom_2,
      '_your_custom_3' => $custom_3,
    ),
));
17 окт. 2021 г. 01:15:09
1

Я обнаружил, что использование isset() позволяет мне применять wp_insert_post() для пользовательских типов записей:

if ( !isset( $id ) ) { 
    $id = wp_insert_post( $new, true ); 
}
10 мар. 2015 г. 22:00:54
Комментарии

Чтобы правильно отформатировать код в вашем ответе (или вопросе), выделите его и нажмите {} над полем редактирования.

Gabriel Gabriel
10 мар. 2015 г. 22:38:51
0

У меня была такая же проблема. Я перепробовал все решения, предложенные на большинстве форумов. Но реально сработало решение, связанное с длиной post_type.

Длина post_type ограничена 20 символами. Так что если у вас похожая проблема и ничего больше не помогло, попробуйте это.

15 июн. 2021 г. 17:23:03