フロントエンド投稿フォームにメタボックスを追加をするにはどうすればよいですか?新しい投稿を作成するフロントエンドの投稿送信と同様に、フォームの返信は投稿のメタボックスに直接入力する必要があります。
バックエンドからフロントエンドへのポストのメタボックスコード例
<?php
function admin_init(){
add_meta_box("mia_post_meta", "Information", "mia_post_meta", "post", "normal", "high");
}
add_action("admin_init", "admin_init");
function mia_post_meta($callback_args) {
global $post;
$post_type = $callback_args->post_type;
$temp_array = array();
$temp_array = maybe_unserialize(get_post_meta($post->ID,'mia_ev_settings',true));
$mia_ev_bday = isset( $temp_array['mia_ev_bday'] ) ? $temp_array['mia_ev_bday'] : '';
echo '<script type="text/javascript">jQuery(document).ready(function(){jQuery("#mia_ev_bday").simpleDatepicker();});</script>';
?>
<div id="mia_custom_settings" style="margin: 13px 0 17px 4px;">
<div class="mia_fs_setting" style="margin: 13px 0 26px 4px;">
<label for="mia_ev_bday" style="color: #000; font-weight: bold;"> Birthday: </label>
<input type="text" class="small-text" value="<?php echo $mia_ev_bday; ?>" id="mia_ev_bday" name="mia_ev_bday" size="67" />
<br />
<small style="position: relative; top: 8px;">ex: <code>13 Jan, 2011</code></small>
</div>
</div>
<?php
}
add_action('save_post', 'save_details');
function save_details($post_id){
global $post;
$temp_array = array();
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
$temp_array['mia_ev_bday'] = isset($_POST["mia_ev_bday"]) ? $_POST["mia_ev_bday"] : '';
update_post_meta( $post->ID, "mia_ev_settings", $temp_array );
}
function mia_bday_scripts(){
wp_register_script('datepicker', get_bloginfo('template_directory').'/js/date/datepicker.js', array('jquery'));
wp_enqueue_script('datepicker');
}
function mia_style_css(){
wp_register_style( 'datepicker', get_bloginfo('template_directory').'/js/date/datepicker.css');
wp_enqueue_style('datepicker');
}
add_action('admin_print_scripts', 'mia_date_scripts');
add_action('admin_print_styles', 'mia_style_css');
?>
Mia_ev_bdayもフロントエンドのユーザーによって記入されるべきです。
フロントエンドのフォーム例 see Image
ユーザーがフォームに追加した情報は投稿に表示され、カスタムメタボックスのバックエンドメタボックスに表示されます。
あなたはあなたのフォーム処理phpスクリプトのアクションを持つフォームを作ることができます。 phpスクリプトでは、フォームが送信されたかどうかを確認し、送信された場合は$ _POST変数を使用してフォームフィールドの変数を作成します。次に、postメタ配列を設定するために$ post = array()を作成し、wp_insert_post($ post)を使用します。投稿を挿入します。
これは、 http://WPHonors.com で使用されているフロントエンド投稿フォームに使用するフォーム処理コードの例です。これは、基本のフォームが設定されていて、値として投稿タイプを持つ非表示のpost_typeフィールドが設定されています。
if( $_POST['post_type'] == 'site' ) {
$title = $_POST['title'];
$desc = $_POST['description'];
$siteurl = $_POST['siteurl'];
$cat = array( $_POST['cat'] );
$tags = trim( $_POST['tags'] );
if(!isset($title)) { echo '<div class="error">Title required.</div>'; }
if(!isset($desc)) { echo '<div class="error">Description required.</div>'; }
if(!isset($siteurl)) { echo '<div class="error">URL required.</div>'; }
if($cat == -1) { echo '<div class="error">Select a category.</div>'; }
if(!isset($tags)) { echo '<div class="error">Must use at least one tag.</div>'; }
if (!current_user_can( 'publish_posts')) { $poststatus = 'draft'; } else { $poststatus = 'publish'; }
//$insert = new TypeSites();
$post = array(
'post_title' => $title,
'post_content' => $desc,
'siteurl' => $siteurl,
'post_category' => $cat,
'tags_input' => $tags,
'post_status' => $poststatus,
'post_type' => 'site'
);
wp_insert_post( $post );
}
最善の解決策は、既存のメタボックスを再作成せずにフロントエンドのあなたのページに取り込むことです。追加の作業をする必要はありません。次のコードを使用するだけです。
// Load necessary admin files
include( ABSPATH . 'wp-admin/includes/template.php' );
include( ABSPATH . 'wp-admin/includes/post.php' );
// Add meta boxes
do_action('add_meta_boxes', $post_type, $post);
do_action('add_meta_boxes_' . $post_type, $post);
// Show Meta Boxes
do_meta_boxes( $post_type, 'normal', $post );
do_meta_boxes( $post_type, 'advanced', $post );
do_meta_boxes( $post_type, 'side', $post );
他の$ _POST変数を設定してwp_insert_post()を使用している限り、 'save_post'アクションが呼び出され、メタボックス内のデータが保存されます。
Wp_insert_postコードの後に次のように使用します。
add_post_meta($post_id, 'name-of-custom-field', $customField, true);
'custom-of-custom-field'を変更して、フォームのデータに入れるためのフォーム要素$ customFieldを追加してください。