Уведомления при отправке пользовательского типа записи с фронтенда

17 янв. 2012 г., 23:31:10
Просмотры: 1.99K
Голосов: 0

У меня есть форма в шаблоне страницы, которая позволяет пользователям отправлять записи в пользовательский тип записи с фронтенда:

$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 должен установить значения по умолчанию для этих параметров. Даже когда я явно задаю их в массиве аргументов, уведомления не исчезают. Как это исправить, чтобы избавиться от уведомлений?

0
Все ответы на вопрос 3
0

Проблема заключается в использовании переменной $post для аргументов. После замены её на что-то вроде $new_post уведомления перестали появляться.

Должен быть какой-то конфликт с global $post, который использует WordPress.

Я взял это из Codex, но, пересмотрев страницу, понял, что $post просто относилось к имени аргумента, а фактический пример в Codex не использует $post для массива аргументов.

18 янв. 2012 г. 20:33:55
0

Добавление данных в произвольный тип записи с фронтенда

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>
14 июл. 2016 г. 16:01:12
1
-1

Кажется, комментарии всё ещё не работают, но у вас есть лишняя запятая в массиве.

 $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
17 янв. 2012 г. 23:37:43
Комментарии

Спасибо, однако лишняя запятая не является проблемой. В PHP массиве это допустимо. Я разобрался и опубликую ответ позже, чтобы дать возможность ответить другим.

jjeaton jjeaton
18 янв. 2012 г. 00:09:56