Publicar mediante programación una publicación (tipo de publicación personalizada) con campos personalizados

17

Tengo una publicación personalizada tipo 'Participante' con muchos campos personalizados. También tengo un formulario con los campos de entrada correspondientes para que el usuario complete. Cuando envíe el formulario, quiero que se genere una nueva publicación con cada campo personalizado que contenga el valor elegido por el usuario.

¿Es posible hacerlo y, de ser así, cómo?

drake035
fuente

Respuestas:

29

Use wp_insert_post () y add_post_meta () , así:

// insert the post and set the category
$post_id = wp_insert_post(array (
    'post_type' => 'your_post_type',
    'post_title' => $your_title,
    'post_content' => $your_content,
    'post_status' => 'publish',
    'comment_status' => 'closed',   // if you prefer
    'ping_status' => 'closed',      // if you prefer
));

if ($post_id) {
    // insert post meta
    add_post_meta($post_id, '_your_custom_1', $custom1);
    add_post_meta($post_id, '_your_custom_2', $custom2);
    add_post_meta($post_id, '_your_custom_3', $custom3);
}
webaware
fuente
Funciona como encanto incluso en WordPress 4.4.2 :)!
jave.web
hoy en día, simplemente puede agregar meta fileds a través de la clave meta_input en wp_insert_post:'meta_input' => ['_your_custom_1' => $custom1, '_your_custom_2' => custom2]
Andreas
Buen punto @Andreas, sugiero que agregue eso como una nueva respuesta y deje que comience a obtener votos. Debería ser la respuesta ahora.
webaware
Thx @webaware :)
Andreas
Funciona como encanto incluso en WordPress 5.1 :)!
Soy la persona más estúpida el
6

Además de la excelente respuesta de @webaware anterior, esto se puede manejar desde wordpress 4.4.0 a través de la llamada wp_insert_post :

$post_id = wp_insert_post(array (
    'post_content' => $content,
    'post_title' => $title,
    'post_type' => 'your_custom_post_type',
    'post_status' => 'publish',

    // some simple key / value array
    'meta_input' => array(
        'your_custom_key1' => 'your_custom_value1',
        'your_custom_key2' => 'your_custom_value2'
        // and so on ;)
    )
));

if ($post_id) {
    // it worked :)
}
Andreas
fuente
4

Esto se puede lograr con bastante facilidad utilizando el complemento Gravity Forms . Puede crear un formulario que complete un Tipo de publicación personalizado en el back-end. Esta publicación se puede configurar para que aparezca como borrador o como publicada. No hay problema para agregar campos personalizados. En mi caso, lo usé para recopilar testimonios de clientes.

Markcbain
fuente
Me gusta esta solución, especialmente si la está entregando a un cliente que quiere administrar el formulario ellos mismos.
webaware