$value ) {
if ( $key === 'date' ) {
$new_columns['wp_aw_cost'] = '💰 AI Cost';
}
$new_columns[ $key ] = $value;
}
return $new_columns;
}
/**
* Render cost column content.
*
* @param string $column Column name.
* @param int $post_id Post ID.
*/
public function render_cost_column( $column, $post_id ) {
if ( $column !== 'wp_aw_cost' ) {
return;
}
global $wpdb;
$table_name = $wpdb->prefix . 'wpaw_cost_tracking';
// Get total cost for this post
$total_cost = $wpdb->get_var(
$wpdb->prepare(
"SELECT SUM(cost) FROM {$table_name} WHERE post_id = %d",
$post_id
)
);
if ( $total_cost && $total_cost > 0 ) {
// Color code based on cost
$color = '#61ff86ff'; // Green
if ( $total_cost > 0.5 ) {
$color = '#fac62aff'; // Yellow
}
if ( $total_cost > 1.0 ) {
$color = '#fe717fff'; // Red
}
printf(
'$%s',
esc_attr( $color ),
esc_html( number_format( $total_cost, 4 ) )
);
} else {
echo '-';
}
}
/**
* Make cost column sortable.
*
* @param array $columns Sortable columns.
* @return array Modified columns.
*/
public function make_cost_column_sortable( $columns ) {
$columns['wp_aw_cost'] = 'wp_aw_cost';
return $columns;
}
/**
* Sort posts by cost when column is clicked.
*
* @param WP_Query $query Query object.
*/
public function sort_by_cost( $query ) {
if ( ! is_admin() || ! $query->is_main_query() ) {
return;
}
$orderby = $query->get( 'orderby' );
if ( $orderby !== 'wp_aw_cost' ) {
return;
}
global $wpdb;
$table_name = $wpdb->prefix . 'wpaw_cost_tracking';
// Join with costs table and order by sum
$query->set( 'meta_query', array() );
add_filter( 'posts_join', array( $this, 'cost_join' ) );
add_filter( 'posts_orderby', array( $this, 'cost_orderby' ) );
add_filter( 'posts_groupby', array( $this, 'cost_groupby' ) );
}
/**
* Join with costs table.
*
* @param string $join Join clause.
* @return string Modified join clause.
*/
public function cost_join( $join ) {
global $wpdb;
$table_name = $wpdb->prefix . 'wpaw_cost_tracking';
$join .= " LEFT JOIN {$table_name} ON {$wpdb->posts}.ID = {$table_name}.post_id";
return $join;
}
/**
* Order by cost sum.
*
* @param string $orderby Order by clause.
* @return string Modified order by clause.
*/
public function cost_orderby( $orderby ) {
global $wpdb;
$order = isset( $_GET['order'] ) && $_GET['order'] === 'asc' ? 'ASC' : 'DESC';
$table_name = $wpdb->prefix . 'wpaw_cost_tracking';
return "SUM({$table_name}.cost) {$order}";
}
/**
* Group by post ID.
*
* @param string $groupby Group by clause.
* @return string Modified group by clause.
*/
public function cost_groupby( $groupby ) {
global $wpdb;
if ( ! $groupby ) {
$groupby = "{$wpdb->posts}.ID";
}
return $groupby;
}
public function custom_css() {
?>