カスタム投稿タイプの定義、管理画面の設定
テーマのfunctions.php
/*
* カスタムフィールド定義
*/
function add_user_review_fields() {
//add_meta_box(表示される入力ボックスのHTMLのID, ラベル, 表示する内容を作成する関数名, 投稿タイプ, 表示方法)
add_meta_box( 'user_review_setting', '投稿者', 'insert_user_review_fields', 'user_review', 'normal');
}
add_action('admin_menu', 'add_user_review_fields');
// カスタムフィールドの入力エリア
function insert_user_review_fields() {
global $post;
// テキスト
echo '投稿者名: <input type="text" name="user_name" value="'.get_post_meta($post->ID, 'user_name', true).'" size="50" /><br>';
$product_id = get_post_meta( $post->ID, 'product_id', true );
// 他の投稿タイプのデータを取得
$product_posts = get_posts( array(
'numberposts' => 1000,
'post_type' => 'product',
) );
// セレクトボックス
echo '製品: <select name="product_id">'. PHP_EOL;
echo '<option value="-">--</option>';
foreach( $product_posts as $product_post ) {
if ( $product_post->ID === intval( $product_id ) ) {
echo '<option value="' . $product_post->ID . '" selected="selected">' . get_the_title($product_post->ID) . '</option>';
} else {
echo '<option value="' . $product_post->ID . '">' . get_the_title($product_post->ID) . '</option>';
}
}
echo '</select>';
wp_reset_postdata();
}
// カスタムフィールドの値を保存
function save_user_review_fields( $post_id ) {
if(!empty($_POST['user_name'])){ //入力されている場合
update_post_meta($post_id, 'user_name', $_POST['user_name'] ); //値を保存
}else{ //未入力の場合
delete_post_meta($post_id, 'user_name'); //値を削除
}
if(!empty($_POST['product_id'])){ //入力されている場合
update_post_meta($post_id, 'product_id', $_POST['product_id'] ); //値を保存
}else{ //未入力の場合
delete_post_meta($post_id, 'product_id'); //値を削除
}
}
add_action('save_post', 'save_user_review_fields');
}
ページでの表示
<?php
$product_posts = get_posts( array(
'post_type' => 'user_review',
'meta_key' => 'product_id',
'meta_value' => $post->ID,
) );
?>
<?php if($product_posts) { ?>
<div class="row">
<?php foreach ($product_posts as $k => $v) { ?>
<div class="col-md-4 col-12">
<div class="box">
<h5 class="text-center"><?= $v->post_title; ?></h5>
<div class="date pb20 text-center f8"><?= date_format(date_create($v->post_date), 'Y/m/d');; ?> <?= $v->user_name; ?>さん</div>
<div><p><?= $v->post_content; ?></p></div>
</div>
</div>
<?php } //foreach ?>
</div>
<?php } //if ?>
コメントを残す