WP insérer une fonction post PHP et des champs personnalisés

23

La fonction WordPress est utilisée pour soumettre des données par programme. Champs standard à soumettre pour inclure le contenu, l’extrait, le titre, la date et bien d’autres.

Ce qu’il n’existe pas de documentation, c’est comment soumettre à un champ personnalisé. Je sais que c'est possible avec la fonction add_post_meta($post_id, $meta_key, $meta_value, $unique); .

Mais, comment inclure cela dans la fonction standard wp_insert_post ?

<?php 
$my_post = array(
     'post_title' => $_SESSION['booking-form-title'],
     'post_date' => $_SESSION['cal_startdate'],
     'post_content' => 'This is my post.',
     'post_status' => 'publish',
     'post_type' => 'booking',
  );
  wp_insert_post( $my_post );
  ?>
    
posée Robin I Knight 04.02.2011 - 21:10

4 réponses

33

Si vous lisez la documentation de wp_insert_post , il renvoie l'ID de publication du message que vous venez de créer.

Si vous combinez cela avec la fonction suivante __update_post_meta (une fonction personnalisée que j'ai acquise de ce site et que j'ai adaptée un peu)

/**
  * Updates post meta for a post. It also automatically deletes or adds the value to field_name if specified
  *
  * @access     protected
  * @param      integer     The post ID for the post we're updating
  * @param      string      The field we're updating/adding/deleting
  * @param      string      [Optional] The value to update/add for field_name. If left blank, data will be deleted.
  * @return     void
  */
public function __update_post_meta( $post_id, $field_name, $value = '' )
{
    if ( empty( $value ) OR ! $value )
    {
        delete_post_meta( $post_id, $field_name );
    }
    elseif ( ! get_post_meta( $post_id, $field_name ) )
    {
        add_post_meta( $post_id, $field_name, $value );
    }
    else
    {
        update_post_meta( $post_id, $field_name, $value );
    }
}

Vous obtiendrez les informations suivantes:

$my_post = array(
    'post_title' => $_SESSION['booking-form-title'],
    'post_date' => $_SESSION['cal_startdate'],
    'post_content' => 'This is my post.',
    'post_status' => 'publish',
    'post_type' => 'booking',
);
$the_post_id = wp_insert_post( $my_post );


__update_post_meta( $the_post_id, 'my-custom-field', 'my_custom_field_value' );
    
réponse donnée Zack 04.02.2011 - 22:01
12

Vous pouvez simplement ajouter le "add_post_meta" après le "wp_insert_post"

<?php 
$my_post = array(
     'post_title' => $_SESSION['booking-form-title'],
     'post_date' => $_SESSION['cal_startdate'],
     'post_content' => 'This is my post.',
     'post_status' => 'publish',
     'post_type' => 'booking',
  );

$post_id = wp_insert_post($my_post);

add_post_meta($post_id, 'META-KEY-1', 'META_VALUE-1', true);
add_post_meta($post_id, 'META-KEY-2', 'META_VALUE-2', true);
?>
    
réponse donnée Philip 05.02.2011 - 09:58
1

Je ne pense pas que vous puissiez l'utiliser avec wp_insert_post () ;.

Cela tient à la façon dont WP stocke les deux types de données. Les articles sont stockés dans une grande table monolithique avec une douzaine de colonnes différentes (wp_posts); les champs personnalisés sont stockés dans une table simple à 4 colonnes (wp_postmeta) composée principalement d’une clé et d’une valeur méta, associée à une publication.

Par conséquent, vous ne pouvez pas réellement stocker de champs personnalisés tant que vous ne disposez pas de l'identifiant de publication.

Essayez ceci:

function myplugin_insert_customs($pid){

    $customs = array(
    'post_id' => $pid,
    'meta_key' => 'Your meta key',
    'meta_value' => 'Your meta value',
    );

    add_post_meta($customs);

}

add_action('save_post', 'myplugin_insert_customs', 99);

Cet article du codex a aidé - c'est un peu l'opposé de ce que vous faites (c'est-à-dire, supprimer une ligne de la base de données après suppression): enlace

    
réponse donnée aendrew 04.02.2011 - 21:31
1

Utilisez le filtre save_post , puis appelez add_post_meta dans votre fonction de filtrage.

    
réponse donnée Micah Ernst 04.02.2011 - 21:30

Lire d'autres questions sur les étiquettes