Уведомления при отправке пользовательского типа записи с фронтенда
У меня есть форма в шаблоне страницы, которая позволяет пользователям отправлять записи в пользовательский тип записи с фронтенда:
$post = array(
'post_status' => 'draft', // Статус записи - черновик
'post_type' => 'stories', // Тип записи - stories
'post_content' => wp_kses_post( $story_content ), // Очищенное содержимое
'post_title' => esc_attr( wp_kses( $story_title, array() ) ), // Очищенный заголовок
'post_author' => 4, // ID автора
);
// Вставляем запись в базу данных
$post_success = wp_insert_post( $post );
Форма работает, но я получаю следующие уведомления:
PHP Notice: Trying to get property of non-object in /Users/username/Sites/the_site/wp-includes/comment-template.php on line 776
PHP Notice: Trying to get property of non-object in /Users/username/Sites/the_site/wp-includes/comment-template.php on line 793
PHP Notice: Trying to get property of non-object in /Users/username/Sites/the_site/wp-includes/general-template.php on line 1645
PHP Notice: Trying to get property of non-object in /Users/username/Sites/the_site/wp-includes/link-template.php on line 1106
PHP Notice: Trying to get property of non-object in /Users/username/Sites/the_site/wp-includes/link-template.php on line 1148
PHP Notice: Trying to get property of non-object in /Users/username/Sites/the_site/wp-includes/link-template.php on line 1106
PHP Notice: Trying to get property of non-object in /Users/username/Sites/the_site/wp-includes/link-template.php on line 1148
Я изучил указанные файлы, и кажется, что проблема связана с comment_status
и ping_status
отправляемой записи. Хотя я предполагал, что wp_insert_post
должен установить значения по умолчанию для этих параметров. Даже когда я явно задаю их в массиве аргументов, уведомления не исчезают. Как это исправить, чтобы избавиться от уведомлений?

Проблема заключается в использовании переменной $post
для аргументов. После замены её на что-то вроде $new_post
уведомления перестали появляться.
Должен быть какой-то конфликт с global $post
, который использует WordPress.
Я взял это из Codex, но, пересмотрев страницу, понял, что $post
просто относилось к имени аргумента, а фактический пример в Codex не использует $post
для массива аргументов.

Добавление данных в произвольный тип записи с фронтенда
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "product") {
$title = $_POST['title'];
$post_type = 'product';
// массив аргументов для вставки с помощью wp_insert_post
$front_post = array(
'post_title' => $title,
'post_status' => 'publish',
'post_type' => $post_type
);
// вставляем запись в базу данных, передавая $new_post в wp_insert_post
// сохраняем ID записи в переменной $pid
$post_id = wp_insert_post($front_post);
// используем $pid (ID записи) для добавления метаданных
update_post_meta($post_id, "short_description", @$_POST["short_description"]);
update_post_meta($post_id, "price", @$_POST["price"]);
update_post_meta($post_id, "length", @$_POST["length"]);
HTML код формы
<form method="POST">
<label>Название товара</label>
<input type="text" value="" class="input-xlarge" name='title'>
<label>Описание товара</label>
<textarea value="" rows="3" class="input-xlarge" name='short_description'>
</textarea>
<label>Цена</label>
<input type="text" value="" class="input-xlarge" name='price'>
<label>Размеры (дюймы):</label>
<input type="text" value="" class="input-xlarge" name='length' placeholder="Длина">
<div>
<button class="btn btn-primary">Добавить товар</button>
</div>
<input type="hidden" name="action" value="product" />
</form>

Кажется, комментарии всё ещё не работают, но у вас есть лишняя запятая в массиве.
$post = array(
'post_status' => 'draft', // статус поста - черновик
'post_type' => 'stories', // тип поста - stories
'post_content' => wp_kses_post( $story_content ), // контент поста с санитизацией
'post_title' => esc_attr( wp_kses( $story_title, array() ) ), // заголовок поста с экранированием
'post_author' => 4, // ЛИШНЯЯ ЗАПЯТАЯ ЗДЕСЬ
);
Возможно, в этом ваша проблема.
'post_author' => 4,
должно быть
'post_author' => 4
