Может кто подскажет, где я туплю.
have_posts($post_id)
- вот это вообще откуда? и вот это
the_post($post_id)
Эти функции не принимают никаких аргументов.
в
get_the_category();
нужно передавать ID поста. По умолчанию используется ID текущего поста в цикле.
next_post_link
и
previous_post_link
Используются только на страницах единичной записи. Любые функции пагинации и навигации работают только с основным запросом (global $wp_query).
showposts
устарело, используйте
posts_per_page
Объясните контекст задачи. На какой странице вы хотите получить пост и как вы его хотите выбрать.
А к чему такие трудности вообще? Если вы хотите вывести пост, используйте шаблон single.php или шаблон для нужного post-type. Там напишите ОБЫЧНЫЙ базовый цикл БЕЗ всяких лишних аргументов, WP сам выведет нужный пост. А для навигации вместо next_post_link и previous_post_link используйте, соответственно get_next_post_link() и get_previous_post_link() . В них можно задать логический параметр $in_same_term для вывода ссылки на пост из ТОЙ ЖЕ рубрики.