WordPress関数はプログラム的にデータを送信するために使用されます。内容、抜粋、タイトル、日付などを含めるために送信する標準フィールド。
ドキュメントがないのは、カスタムフィールドに送信する方法です。私はそれがadd_post_meta($post_id, $meta_key, $meta_value, $unique);
関数で可能であることを知っています。
しかし、それを標準の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 );
?>
wp_insert_post
のドキュメントを読むと、作成したばかりの投稿の投稿IDが返されます。
あなたがそれを次の関数__update_post_meta
(私がこのサイトから得た、そして少し適応したカスタム関数)と組み合わせるならば
/**
* 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 );
}
}
次のようになります。
$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' );
'wp_insert_post'の後に 'add_post_meta'を追加するだけです。
<?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);
?>
save_post
filterを使用してから、フィルター関数でadd_post_meta
を呼び出します。
私はあなたがそれをwp_insert_post()で使用できるとは思わない。
その理由は、WPが2つのデータ型を格納する方法が原因です。投稿は1ダースの大きなモノリシックテーブルに格納されます(wp_posts)。カスタムフィールドは、主に投稿に関連付けられたメタキーと値で構成される、より単純な4列のテーブル(wp_postmeta)に格納されます。
したがって、投稿IDを取得するまでは、カスタムフィールドを実際に保存することはできません。
これを試して:
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);
このコーデックスの投稿は役に立ちました - それはあなたがしていることとは逆のことです(つまり、投稿の削除時にDB行が削除される): http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post