web-dev-qa-db-fra.com

Publier par programme une publication (type de publication personnalisée) avec des champs personnalisés

J'ai un type de message personnalisé 'Participant' avec de nombreux champs personnalisés. J'ai aussi un formulaire avec les champs de saisie correspondants que l'utilisateur doit remplir. Lorsqu'il envoie le formulaire, je souhaite qu'un nouveau message soit généré avec chaque champ personnalisé contenant la valeur choisie par l'utilisateur.

Est-il possible de faire et si oui, comment?

14
drake035

Utilisez wp_insert_post () et add_post_meta () , comme ceci:

// 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);
}
26
webaware

Ceci peut être réalisé assez facilement en utilisant le plugin Gravity Forms . Vous pouvez créer un formulaire qui renseigne un type de publication personnalisé dans le backend. Ce message peut être configuré pour apparaître comme brouillon ou tel que publié. Aucun problème pour ajouter des champs personnalisés. Dans mon cas, je l'ai utilisé pour recueillir des témoignages de clients.

3
markcbain

En plus de excellente réponse de @webaware ci-dessus, cela peut être géré depuis wordpress 4.4.0 tous via le wp_insert_post call:

$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 :)
}

1
Andreas