Функция вставляет посты (записи, страницы, произвольные типы постов) в базу данных WordPress. В случае успеха возвращает ID поста, в случае неудачи либо 0 либо объект WP_Error ( в зависимости от значения второго параметра ).
Если же вам нужно сделать несколько записей, то просто запустите эту функцию в цикле PHP.
wp_insert_post( $postarr, $wp_error = false )
Если установлено future
(запланированная публикация в будущем), то время публикации post_date (этот параметр дан ниже) должно быть соответствующим.
По умолчанию — draft
, то есть, если вы не укажете этот параметр, то пост создастся как черновик.
post
— запись (по умолчанию), page
— страница.open
— разрешены,closed
— запрещены.По умолчанию — значение get_option('default_ping_status')
(находится в Настройки > Обсуждение, скриншот ниже).
http://rpc.weblogs.com/RPC2 http://bing.com/webmaster/ping.aspx
Y-m-d H:i:s
, по умолчанию текущая дата.open
или запретить closed
комментирование этого поста.template-portfolio.php
.
Если тип поста — не страницы page
, значение этого параметра будет проигнорировано.
true
— возвращать объект WP_Error в случае неудачи (по умолчанию — false
).$my_postarr = array( 'post_title' => 'Новый пост', 'post_content' => 'Это мой новый пост.', // контент 'post_status' => 'publish' // опубликованный пост ); // добавляем пост и получаем его ID $my_post_id = wp_insert_post( $my_postarr ); // присваиваем рубрику к посту (ссылка на документацию wp_set_object_terms() дана чуть выше) wp_set_object_terms( $my_post_id, 5, 'category' ); // присваиваем метки wp_set_object_terms( $my_post_id, array(7, 8), 'post_tag' );
Этим способом вы также сможете изменить и другие параметры поста, упомянутые в статье.
$updated_post_arr = array( 'ID' => 500, // допустим, ID поста, заголовок которого нужно изменить, равен 500 'post_title' => 'Новый заголовок' // заголовок ); // обновляем пост (все остальные его параметры останутся прежними) wp_insert_post( $updated_post_arr );
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Добрый вечер. спасибо за ваш блог - очень познавательно. Подскажите пожалуйста в моем вопросе - если это вас не затруднит. Мне нужно реализовать присвоение всем кастомным типам постов в момент их публикации дефолтной кастомной таксономии. На мой взгляд описанный пример №1 в этой статье должен был мне помочь. Но увы. Я его взяла в чистом виде и добавила себе в файл плагина. Предварительно создав категорию 5 (как в примере). Посты у меня создались, целых 3 шт а вот категория им присвоилась как обычно uncategorized(((
Заранее спасибо)
Доброе утро!
Возможно категории просто не поддерживаются вашим кастомным типом поста? Рекомендую почитать здесь.
спасибо за такую оперативную реакцию. но все дело в том что ваш кусочек кода я вставляю сперва в неизменном виде-чтобы проверить как он отработает у меня. а потом планирую подстраивать под себя. Таким образом он должен у меня просто создать пост и присвоить ему категорию №5(обычные посты - категории поддерживают), игнорируя значение категории по умолчанию, указанной в общих настройках. Или может я неправильно растолковала назначение вашего кода?
Вот что пишется у меня на экране после вставки этого кода:
Notice: Trying to get property of non-object in /home/pau/www/tryd/wp-includes/post.php on line 3676
Fatal error: Call to undefined function is_user_logged_in() in /home/pau/www/tryd/wp-includes/post.php on line 2315
Очень странные ошибки, никак не связанные с функцией вставки поста.
То есть они появляются именно после вставки кода из первого примера? Который вы вставляете в
functions.php
?Здравствуйте Михаил хочу задать вам все таки свой вопрос по api woocommerce тем более, что я решил почти свой вопрос? Остались моменты с BD да с самим WP. Я думаю Вы сможете мне помочь .
У меня есть код который проверяет существует ли некая переменная в текстовом поле, если она есть, то создает произвольный пост shop_coupon. Вопрос, как можно проверить, что в базе данных существует данная переменная и если она существует не создавать пост заново, а обновить его . У меня пока получается, только создавать новый купон когда я изменяю в текстовом поле текст, а не изменить его. Я попытался использовать get_page_by_title, но встала загвоздка получить заголовок, а может так и не получится, вообщем надеюсь, что вы мне поможете. Вот код.
Здравствуйте!
Нужно больше конкретики.
Этот код весит при регистрации пользователя в моем пользовательском поле
Мне нужно, как то проверить создана ли у меня запись в shop_coupon с заголовком из $coupon_code = $_POST['my_cart']; и если, такая запись там есть, то проверить ее в базе и если она существует, то при редактировании $coupon_code = $_POST['my_cart'] изменить заголовок на новый, а не создавать всегда при редактировании заголовка новые записи в shop_coupon?
Даже не знаю, наверн мне не хватает знаний по WooCommerce )
Михаил я тут попробовал реализовать тоже самое без WooCommerce .
И возникла та же проблема, может без WC вы сможете мне, что подсказать.
У меня через хуки wp подключено дополнительное поле при регистрации. $_POST['my_field'], но дело в том, что мне надо, что бы это поле дополнительно отправляло дополнительные данные в мой пользовательский тип данных. Этот код, как раз демонстрирует ту часть кода, где я отправляю пользовательские данные. Все хорошо работает, но есть одно но. Я не могу понять, как сделать проверку этих данных. Если данные отправлены и поле создано, не создавать его еще раз, а перезаписать существующие данные. Знаю есть методы wp_update_post() ,update_post_meta,но там надо знать ID его, как раз я получить и не могу?
Если я правильно понял задачу, для получения ID по заголовку любого типа постов можно использовать эту функцию:
Ну а зная ID, уже можно делать что угодно :)
Да Михаил я так уже пробовал я тоже думал, что должно работать, но получается следующие.
Делаю проверку через wp_update_post так
Если я все сделал правильно то вроде должно быть так . И он должен брать текущий заголовок из моего поля my_field находить по нему ID сравнивая его с my_code (пользовательский тип поста) соответственно подставлять его в массив и обновлять заголовок. Но это не работает он создает новые посты подобно тому, что не видит 'ID' => $post_id ,. Или я еще, что то не сделал ?
Тут нужно тестить каждый шаг, например:
$my_code
, сравнить, совпадают ли заголовки.$post_id
.Проверять можно тупо через
echo
.Михаил не совсем понятно, где смотреть
Я же в
functions.php, как можно вывести и, где посмотреть через какой нибудь хук?
На тестовом сайте используйте:
Это поломает сайт (временно конечно), зато вы сможете выяснить пару вещей.
Михаил Здравствуйте.
Делаю как выговорите. Добавляю
functions.php в конце после функции и он, так не работает. Там все переменные пустые. Да оно и понятно за функцией они не живут.
Пробовал и в конце до закрывающихся скобок функции, но там он вообще ни, как не реагирует и не проявляет себя на сайте?
Вот примеры как я делал
Так все переменные пустые.
Так вообще ни какой реакции.
Я что то делаю не так?
Здравствуйте!
Ну значит
$_POST['my_field']
пустой и проблему надо искать на странице с формой.Так проверять все таки правильно, как в функции или за функцией?
Я это спрашиваю потому, что если взять и создать переменную $my_code2 = 10; с числом
10 строка echo $my_code2; exit; ведет себя ровно одинаково, как в предыдущем примере. Но она же не может быть пустая Михаил? Там заданно число 10 низменное. Почему его оно тоже не показывает поэтому я и задал вопрос выше.
Вообще должно вывести, через Ctrl + U смотрели?
Да пробовал через Ctrl + U даже, так echo 'слово ='. $my_code2; exit; "слово" Специально задавал, что бы проще найти было. И находит когда echo 'слово ='. $my_code2; exit; в не функции естественно переменная пустая вот так текст = 'пусто', а в функции не где не показывает . Искал везде и адмнке и на сомом сайте. Экспериментировал на голом WP 4.1 в денвере. Работает только если вот, так продублировать переменную в не функции, но как я понял это не то ,так не проверить какие надо переменные ?
Короче говоря хватит нам вслепую гадать, надо бы мне глянуть на сайт. Он у вас только на денвере? Можете залить в инет и потом отписать мне по email?
Хорошо Михаил так и сделаю