Как добавить кастомную запись через api или webhook в hivepress на wordpress?
Мне нужно программно добавить объявление в плагине/теме hivepress на wordpress
Я не особо часто имею дело с wordpress и не могу разобраться в какую сторону копать?
Пробовал:
через api hivepress, подставив следующий по порядку индекс в DB вместо {listing_id}
curl -X POST /wp-json/hivepress/v1/listings/{listing_id} -H "Content-Type: application/json" -d '{"title":"string","description":"string"}' |
curl -X POST /wp-json/hivepress/v1/listings/{listing_id} -H "Content-Type: application/json" -d '{"title":"string","description":"string"}'
не работает, возвращает ошибку 400 Bad request
в самой ошибке body
{ "error": { "code": 400, "errors": { "required": { "message": "Поле "Описание" является обязательным." } } } } |
{ "error": { "code": 400, "errors": { "required": { "message": "Поле "Описание" является обязательным." } } } }
Пробовал через класс внутри самой системы,
добавив этот код через плагин в админ панели
// Create listing. $listing = ( new HivePressModelsListing() )->fill( [ 'title' => 'Custom title', 'featured' => true, ] ); // Save listing. $listing->save(); |
// Create listing. $listing = ( new HivePressModelsListing() )->fill( [ 'title' => 'Custom title', 'featured' => true, ] ); // Save listing. $listing->save();
ноль реакции
я не могу понять что не так? единственное на что я обратил внимание, что если через апи в адрес запроса подставляешь id ранее добавленной вручную записи то оно работает и вносит изменения...
пробовал в самой базе предварительно вставить строчку и потом обращаться к ней, тоже не хочет работать )))
в целом мне вообще не важно как, но главное чтобы работало
я уже начинаю раздражаться, помогите пожалуйста сохранить душевный покой)
Дополнительные вопросы
yarovikov @weart В документации черным по белому написано, что это для обновления листинга, а не добавления.
Для добавления нового юзайте вэпэшное wp_insert_post
- ну бывает, иногда сижу, смотрю в книгу а вижу сами знаете
- mt. NATS, знаю))
Ответы на вопрос 0
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Ошибка 400 при попытке создать listing через HivePress API часто возникает из-за двух вещей: вы используете endpoint не для создания, а для работы с конкретной записью, и не передаёте обязательные поля в формате, который ожидает HivePress. Подставлять следующий ID в URL не нужно. ID создаёт WordPress/HivePress после успешного POST-запроса.
Сначала проверьте, какие REST routes реально доступны:
curl https://example.com/wp-json/ | grep hivepress
Если endpoint создания поддерживается, обычно логика такая: POST отправляется в коллекцию, а не в конкретный ID. То есть не
/listings/{listing_id}, а что-то вроде/listings. Точный путь зависит от версии HivePress и включённых расширений.Пример направления:
curl -X POST https://example.com/wp-json/hivepress/v1/listings -H "Content-Type: application/json" -H "Authorization: Bearer TOKEN" -d '{"title":"Тестовое объявление","description":"Описание объявления"}'
Но в HivePress часто мало передать только title/description. Могут быть обязательные поля: category, vendor, статус, location, price, атрибуты. Поэтому сообщение об ошибке надо читать полностью: оно обычно говорит, какое поле required.
Если публичный REST API неудобен, надёжнее сделать свой небольшой endpoint внутри WordPress и создавать запись через API WordPress/HivePress:
add_action('rest_api_init', function () { register_rest_route('custom/v1', '/listing', [ 'methods' => 'POST', 'permission_callback' => function () { return current_user_can('edit_posts'); }, 'callback' => function (WP_REST_Request $request) { $post_id = wp_insert_post([ 'post_type' => 'hp_listing', 'post_status' => 'draft', 'post_title' => sanitize_text_field($request['title']), 'post_content' => wp_kses_post($request['description']), ]); if (is_wp_error($post_id)) { return $post_id; } return ['id' => $post_id]; }, ]); });
После создания записи можно заполнить taxonomy/meta-поля, которые нужны конкретно вашему HivePress. Их лучше посмотреть в базе на уже созданном вручную объявлении.
Итог: не угадывайте ID и не отправляйте данные в URL конкретной записи. Сначала снимите структуру REST routes и обязательные поля, затем либо используйте правильный endpoint создания, либо сделайте свой контролируемый endpoint.