ID); // 1.3 Open Graph Output // og:title // 1. Manual OG title // 2. SEO title (from Core Meta logic) // 3. Post title $og_title = !empty($meta['og_title']) ? $meta['og_title'] : Helpers::get_seo_title($post); // Note: Helpers::get_seo_title returns (Manual SEO > Post Title). So this logic covers 2 and 3. // og:description // 1. Manual OG description // 2. SEO description // 3. Auto summary $og_desc = !empty($meta['og_description']) ? $meta['og_description'] : Helpers::get_seo_description($post); // Note: Helpers::get_seo_description returns (Manual SEO > Excerpt > Auto). Covers 2 and 3. // og:url // Emission required. Logic: Permalink (safest default). // 1.2 canonical logic uses manual override. Should OG match? // Usually OG URL is the canonical URL. PRD doesn't specify override for OG URL. // But 3.3 says "wp_head for all meta output". // I will use Canonical URL logic for consistency. $og_url = Helpers::get_canonical_url($post); // og:type // Default: article $og_type = 'article'; // og:image // 1. Manual OG image // 2. Featured image // 3. Global Default // 4. Omit $og_image = Helpers::get_og_image($post); echo "\n\n"; echo '' . "\n"; echo '' . "\n"; echo '' . "\n"; echo '' . "\n"; if (!empty($og_image)) { echo '' . "\n"; } } }