= 0) { continue; } $rows[] = [ 'url' => $entry['url'] ?? '', 'clicks' => (int) $entry['cur_clicks'], 'change' => $delta, ]; } // Biggest click loss first (most negative). usort($rows, static fn($a, $b) => $a['change'] <=> $b['change']); return [ 'rows' => array_slice($rows, 0, self::MAX_ROWS), ]; } public function has_data(array $payload): bool { return !empty($payload['rows']); } public function render(array $payload): string { $rows = Top_Posts_Renderer::page_rows($payload['rows'] ?? []); if ($rows === []) { return ''; } return Email_Report_Html::heading( $this->label(), __('Worth a look: these pages lost the most clicks vs the previous period', 'thinkrank') ) . Email_Report_Html::list_rows($rows, 'down') . Email_Report_Html::link(__('See all pages', 'thinkrank'), Email_Report_Html::admin_link('analytics', 'dashboard')); } public function fallback_html(): string { return ''; } }