WP insert fonction PHP poste et champs personnalisés
-
16-10-2019 - |
Question
La fonction de WordPress est utilisé pour l'envoi de données par programmation. Champs standard à soumettre à incude le contenu, extrait, le titre, la date et beaucoup d'autres.
Qu'est-ce qu'il n'y a pas de documentation pour est de savoir comment soumettre à un champ personnalisé. Je sais qu'il est possible avec la fonction add_post_meta($post_id, $meta_key, $meta_value, $unique);
.
Mais, comment l'inclure dans la fonction standard de 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 );
?>
La solution
Si vous lisez la documentation wp_insert_post
, il renvoie l'ID poste de poste que vous venez établi.
Si vous combinez cela avec la __update_post_meta
fonction suivante (une fonction personnalisée j'ai acquis de ce site et adapté 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 ce qui suit:
$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' );
Autres conseils
Vous pouvez simplement ajouter le 'add_post_meta' après la '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);
?>
Je ne pense pas que vous pouvez l'utiliser avec wp_insert_post () ;.
La raison est à cause de la façon dont WP stocke les deux types de données. Les messages sont stockés dans une grande table monolithique avec une douzaine de colonnes (wp_posts); les champs personnalisés sont stockés dans un simple tableau 4 colonnes (wp_postmeta) constitué principalement d'une clé de meta et de la valeur, associé à un poste.
Par conséquent, vous ne pouvez pas vraiment stocker les champs personnalisés jusqu'à ce que vous avez l'ID de poste.
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);
Ce poste a aidé codex - c'est un peu à l'opposé de ce que vous faites (par exemple, suppression d'une ligne DB lors de la suppression post): http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post
Utiliser un filtre save_post
, puis appelez add_post_meta
dans votre fonction de filtre.