Функция get_next_post() работает в цикле the_post(). Для того чтобы установить текущий пост самостоятельно надо создать дополнительный цикл и в нём получить интересующую вас ссылку, например так:
$myid = 999;
$next_post = '';
$previous_post = '';
$args = array('p'=> $myid, 'post_type' => 'any');
$my_posts = new WP_Query($args);
if($my_posts){
foreach( $my_posts as $post ){
$next_post = get_next_post_link();
$previous_post = get_previous_post_link();
}
}
wp_reset_postdata();
Или так:
$myid = 999;
$next_post = get_around_post ($myid, 'ASC');
$previous_post = get_around_post ($myid, 'DESC');
function get_around_post ($custom_id, $side){
global $posts;
$category = get_the_category();
rsort( $category );
$cat_add_id = $category[0]->term_id;
$around_post = '';
$my_posts = get_posts( array(
'cat' => $cat_add_id,
'posts_per_page' => 1,
'exclude' => $custom_id,
'order' => $side,
) );
if( $my_posts ){
foreach( $my_posts as $post ){
$around_post = '<a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a>';
}
}
wp_reset_postdata();
return $around_post;
}