カスタム投稿タイプを設定する方法まとめ

カスタム投稿タイプの定義、管理画面の設定

テーマの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 ?>

 

コメントを残す

メールアドレスが公開されることはありません。