$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() { ?>