Publique programaticamente uma postagem (tipo de postagem personalizada) com campos personalizados

17

Eu tenho um tipo de postagem personalizado 'Participante' com muitos campos personalizados. Também tenho um formulário com os campos de entrada correspondentes para o usuário preencher. Quando ele envia o formulário, desejo que uma nova postagem seja gerada com cada campo personalizado contendo o valor escolhido pelo usuário.

É possível fazer e, em caso afirmativo, como?

drake035
fonte

Respostas:

29

Use wp_insert_post () e add_post_meta () , assim:

// 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
fonte
Funciona como charme, mesmo no WordPress 4.4.2 :)!
Jave.web 11/04
hoje em dia, você pode simplesmente adicionar meta-arquivos através da chave meta_input em wp_insert_post:'meta_input' => ['_your_custom_1' => $custom1, '_your_custom_2' => custom2]
Andreas
Bom argumento @Andreas, sugiro que você adicione isso como uma nova resposta e que comece a receber votos. Deve ser a resposta agora.
Webaware
Thx @webaware :)
Andreas
Funciona como charme, mesmo no WordPress 5.1 :)!
Eu sou a pessoa mais estúpida
6

Além da ótima resposta do @webaware acima, isso pode ser tratado desde o wordpress 4.4.0, tudo através da chamada 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
fonte
4

Isso pode ser conseguido facilmente usando o plug-in Gravity Forms . Você pode criar um formulário que preencha um Tipo de postagem personalizado no back-end. Esta postagem pode ser configurada para aparecer como rascunho ou publicada. Não há problema em adicionar campos personalizados. No meu caso, usei-o para reunir depoimentos de clientes.

markcbain
fonte
Gosto dessa solução, especialmente se você a estiver entregando a um cliente que queira gerenciar o formulário por conta própria.
Webaware