// functions-bpe-news.php add_action('wp_ajax_get_latest_news', 'bpe_get_latest_news'); add_action('wp_ajax_nopriv_get_latest_news', 'bpe_get_latest_news'); function bpe_get_latest_news() { global $wpdb; // Run the query $results = $wpdb->get_results(" SELECT n.ticker, n.st_date, n.st_headline, n.st_source, n.st_url, r.news_headline, r.etss_price_target, r.ai_summary, r.invest_window_start, r.invest_window_end, r.ai_final_metadata FROM bpe_news_articles n LEFT JOIN ( SELECT r1.* FROM reports r1 INNER JOIN ( SELECT ticker, MAX(timestamp) AS max_ts FROM reports GROUP BY ticker ) r2 ON r1.ticker = r2.ticker AND r1.timestamp = r2.max_ts ) r ON n.ticker = r.ticker ORDER BY n.st_date DESC LIMIT 20 ", ARRAY_A); // Return JSON wp_send_json($results); }