Jak získat post ID mimo loop

Získat ID aktuálního příspěvku mimo loop se může někdy hodit. Jak na to?

Tak záleží na tom jak s ID potřebujeme nakládat. Mimo loop můžeme na šabloně zobrazující pouze jeden příspěvek (typicky single.php nebo sidebar této šablony) přistupovat přímo k objektu $post

$postID = $post->ID;

Jde ale o globální proměnnou, proto, když k ní chceme přistupovat z nějaké funkce, musíme se k ní dle toho zachovat:

function moje_funkce(){
  global $post;
  $postID = $post->ID;
}

Jak jsem výše zmínil, takto lze bezprobémově přistupovat pouze k ID příspěvku při zobrazení na single.php. Pokud tedy chceme pracovat s ID aktuálního příspěvku například v sidebaru, který se ale zobrazuje i na výpise kategorie, neměli bychom zapomenou na ošetření našeho kódu:

if ( is_single() ) {
  $postID = $post->ID;
}

No a snad jen již pro úplnost, k objektu $post lze přistupovat i krkolomějším způsobem přes objekt $wp_query, který objekt post obsahuje:

global $wp_query;
$postID = $wp_query->post->ID;