「Wordpress」の管理画面のカスタマイズです。
投稿一覧にいろいろな項目を追加して、ソート機能を実装します。
投稿タイプに応じて切り分けが可能で、追加した後も「表示オプション」を利用して簡単に非表示にすることもできます。
/**
* 投稿一覧の項目をカスタマイズ
*
*/
/**
* テーブルヘッダー部分のセット
* 投稿一覧共通
*/
function add_posts_columns_custom($columns) {
// 右辺に一覧に表示させたい文字列
$columns['thumbnail'] = '一覧画像'; // アイキャッチ
$columns['postid'] = 'ID'; // 記事ID
return $columns;
}
/**
* カスタム投稿タイプ《column》のみ
*/
function add_posts_columns_custom_column($columns) {
$columns['writer'] = '執筆者'; // タクソノミー writer
$columns['column-rank'] = '順位'; // カスタムフィールド colum-rank
$columns['column-pickup'] = '注目コラム';
$columns['column-score-num'] = '平均点'; // カスタムフィールドを演算する
return $columns;
}
/**
* テーブルボディ部分のセット
* 投稿一覧共通
*/
function add_posts_columns_custom_row($column_name, $post_id) {
if ($column_name == 'thumbnail') {
$thumb = get_the_post_thumbnail($post_id, array(80,80), 'thumbnail'); // 画像のサイズを指定しておく
echo ( $thumb ) ? $thumb : '-'; // 値がないときの処理をしておく
}
if ($column_name == 'postid') {
echo $post_id;
}
}
/**
* カスタム投稿タイプ《column》のみ
*/
function add_posts_columns_custom_row_column($column_name, $post_id) {
if ($column_name == 'writer') {
$writer = get_the_term_list($post_id, 'writer', '', ', ');
echo ( $writer ) ? $writer : '-';
}
if ($column_name == 'column-rank') {
$rank = get_post_meta($post_id, 'column-rank', true);
echo ( $rank ) ? $rank : '-';
}
if ($column_name == 'column-pickup') {
$pickup = get_post_meta($post_id, 'column-pickup', true);
echo ( $pickup ) ? $pickup : '-';
}
if ($column_name == 'column-score-num') {
$score_num = get_post_meta($post_id, 'column-score-num', true);
$score_total = get_post_meta($post_id, 'column-score-total', true);
$score = $score_total / $score_num;
echo ( $score ) ? $score : '-';
}
}
add_filter( 'manage_posts_columns', 'add_posts_columns_custom' );
add_action( 'manage_posts_custom_column', 'add_posts_columns_custom_row', 10, 2 );
add_filter( 'manage_column_posts_columns', 'add_posts_columns_custom_column' );
add_action( 'manage_column_posts_custom_column', 'add_posts_columns_custom_row_column', 10, 2 );
/**
* 投稿一覧ソート機能
*
*/
function custom_sortable_columns($sort_column) {
$sort_column['column-rank'] = 'column-rank';
$sort_column['writer'] = 'writer';
$sort_column['postid'] = 'ID';
return $sort_column;
}
function custom_orderby_columns( $vars ) {
if (isset($vars['orderby']) && 'column-rank' == $vars['orderby']) {
$vars = array_merge($vars, array(
'orderby' => 'meta_value_num',
'meta_query' => array(
array(
'key' => 'column-rank',
'value' => array(0), // 値が0のものを除く
'compare' => '>',
),
),
));
}
if (isset($vars['orderby']) && 'writer' == $vars['orderby']) {
$vars = array_merge($vars, array(
'taxonomy' => 'writter',
'orderby' => 'name',
));
}
if (isset($vars['orderby']) && 'postid' == $vars['orderby']) {
$vars = array_merge($vars, array(
'orderby' => 'ID',
));
}
return $vars;
}
add_filter( 'manage_edit-column_sortable_columns', 'custom_sortable_columns' ); // manage_edit-[post_type]_sortable_columns
add_filter( 'request', 'custom_orderby_columns' );