管理画面の記事一覧に計算した値を表示する

カスタムフィールド の値の平均値を記事一覧に出したかったので下記のように作成しました。

// =========================================
// custom post
// =========================================
function create_post_type()
{
	$exampleSupports = [
		'title',  // 記事タイトル
		'editor',  // 記事本文
		'thumbnail',  // アイキャッチ画像
		'category',  // カテゴリ
		'revisions'  // リビジョン
	];
	// post_type case_study
	register_post_type(
		'ranking',
		array(
			'label' => 'ランキング',
			'public' => true,
			'has_archive' => true,
			'menu_position' => 5,
			'supports' => $exampleSupports
		)
	);
}
add_action('init', 'create_post_type');

// =========================================
// 平均値を出す
// =========================================

function average($post_id)
{
	$average_price = intval(get_post_meta($post_id, 'average_price', true));//金額
	$average_taste = intval(get_post_meta($post_id, 'average_taste', true));//味
	$average_packaging = intval(get_post_meta($post_id, 'average_packaging', true));//包装
	$average_appearance = intval(get_post_meta($post_id, 'average_appearance', true));//外見
	$average_name_recognition = intval(get_post_meta($post_id, 'average_name_recognition', true));//知名度

	$average = round(($average_price + $average_taste + $average_packaging + $average_appearance + $average_name_recognition) / 5, 1);//小数点第一位まで出す

	return $average;
}
// =========================================
// 管理画面の記事一覧に表示する
// =========================================

function add_posts_columns($columns)
{
	$columns['ranking_recommended'] = '評価 平均値';
	return $columns;
}
function custom_posts_column($column_name, $post_id)
{
  echo average($post_id);
}
add_filter('manage_edit-ranking_columns', 'add_posts_columns');
add_action('manage_ranking_posts_custom_column', 'custom_posts_column', 10, 2);

ランキングというカスタム投稿を作成し、そこに評価を入れるカスタムフィールドを作成。

一覧に平均値が出力されます。

平均値を出す

ループ外でカスタムフィールドを出すには下記で出る。
get_post_meta([記事のID], [カスタムフィールド名], true)
それをintval()することによって数値にします。

取得したものを全て足し、5で割ると平均がでます。割り切れなかった時のために、round( 数値 [, 桁数 ] )を使い、小数点第一位で四捨五入しています。

function average($post_id)
{
	//カスタムフィールドを取得。その際数値にしておく。
	$average_price = intval(get_post_meta($post_id, 'average_price', true));//金額
	$average_taste = intval(get_post_meta($post_id, 'average_taste', true));//味
	$average_packaging = intval(get_post_meta($post_id, 'average_packaging', true));//包装
	$average_appearance = intval(get_post_meta($post_id, 'average_appearance', true));//外見
	$average_name_recognition = intval(get_post_meta($post_id, 'average_name_recognition', true));//知名度
	//平均値を取得。今回は小数点第一位まで取得したかったので、round( (全体の足した数/5) ,1 )
	$average = round(($average_price + $average_taste + $average_packaging + $average_appearance + $average_name_recognition) / 5, 1);

	return $average;//return しておく
}

管理画面の記事一覧に表示

function add_posts_columns($columns)
{
	$columns['ranking_recommended'] = '評価 平均値';
	return $columns;
}
function custom_posts_column($column_name, $post_id)
{
  echo average($post_id);//さっき作ったaverage($post_id);をここでecho
}
add_filter('manage_edit-[カスタム投稿のslug]_columns', 'add_posts_columns');
add_action('manage_[カスタム投稿のslug]_posts_custom_column', 'custom_posts_column', 10, 2);

参考サイト

https://techacademy.jp/magazine/22845
https://www.nxworld.net/wordpress/wp-add-posts-columns-custom-fields.html
  • コーダーのための計算機