Avisos al enviar un tipo de publicación personalizada desde el front-end

17 ene 2012, 23:31:10
Vistas: 1.99K
Votos: 0

Tengo un formulario en una plantilla de página que permite a los usuarios enviar publicaciones a un tipo de publicación personalizada desde el front-end:

$post = array(
    'post_status' => 'draft',
    'post_type' => 'stories',
    'post_content' => wp_kses_post( $story_content ),
    'post_title' => esc_attr( wp_kses( $story_title, array() ) ),
    'post_author' => 4,
);

// Insertar la historia en la base de datos
$post_success = wp_insert_post( $post );

Funciona, pero recibo estos avisos:

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

He revisado los archivos mencionados y parece estar relacionado con el comment_status y ping_status de la publicación enviada. Sin embargo, supongo que los valores predeterminados de wp_insert_post deberían incluir valores para esos campos. Incluso cuando los establezco en mi array de argumentos, sigo recibiendo los avisos. ¿Cómo solucionar esto para eliminar los avisos?

0
Todas las respuestas a la pregunta 3
0

El problema está en usar la variable $post para los argumentos. Después de cambiarlo a algo como $new_post ya no recibo los avisos.

Debe haber algún conflicto con el global $post que usa WordPress.

Lo tomé del Codex, pero al volver a mirar la página, me di cuenta de que $post solo se refería al nombre del argumento y el ejemplo real en el codex no usa $post para el array de argumentos.

18 ene 2012 20:33:55
0

Insertar Datos en un Custom Post desde el Front End

if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "product") {

    $title     = $_POST['title'];
    $post_type = 'product';
    //el array de argumentos para ser insertados con wp_insert_post
    $front_post = array(
    'post_title'    => $title,
    'post_status'   => 'publish',          
    'post_type'     => $post_type 
    );

    //insertar el post en la base de datos pasando $new_post a wp_insert_post
    //almacenar nuestro ID de post en una variable $pid
    $post_id = wp_insert_post($front_post);
    //ahora usamos $pid (post id) para ayudar a añadir nuestros metadatos
    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"]);

Código HTML Aquí

<form method="POST">
<label>Nombre del Producto</label>
        <input type="text" value="" class="input-xlarge" name='title'>
        <label>Descripción del Producto</label>
        <textarea value="" rows="3" class="input-xlarge" name='short_description'>
        </textarea>
 <label>Precio</label>
        <input type="text" value="" class="input-xlarge" name='price'>
        <label>Dimensiones (pulgadas):</label>
        <input type="text" value="" class="input-xlarge" name='length' placeholder="Largo">
  <div>
            <button class="btn btn-primary">Añadir Producto</button>
        </div>
        <input type="hidden" name="action" value="product" />
 </form>
14 jul 2016 16:01:12
1
-1

Parece que aún no puedo comentar, pero tienes una coma extra en tu array.

 $post = array(
     'post_status' => 'draft', // borrador
     'post_type' => 'stories', // historias
     'post_content' => wp_kses_post( $story_content ), // contenido de la historia
     'post_title' => esc_attr( wp_kses( $story_title, array() ) ), // título de la historia
     'post_author' => 4, //AQUÍ HAY UNA COMA EXTRA
 );

Quizás ese sea tu problema.

 'post_author' => 4,

debería ser

 'post_author' => 4
17 ene 2012 23:37:43
Comentarios

Gracias, sin embargo la coma adicional no es el problema. Eso es válido en un array de PHP. Lo he resuelto, y publicaré la respuesta después de darle la oportunidad a otros de responder.

jjeaton jjeaton
18 ene 2012 00:09:56