Я столкнулся с этим сегодня и нашел исправление.
Вам нужно будет сохранить исходный $ post перед началом нового цикла, а затем в конце вашей функции вам нужно будет установить его обратно.
Перед выполнением функции присвойте $ post временную переменную.
$original_query = $wp_query;
Затем в конце своей функции установите его обратно.
$wp_query = $original_query;
wp_reset_postdata();
Не уверен, что приведенное вышеработает в вашем случае, как я использовал пользовательский запрос.
Я разместил свой код ниже, чтобы вы могли посмотреть.
global $wpdb;
global $post;
$originalpost = $post;
$querydetails = "
SELECT *
FROM $wpdb->posts
WHERE $wpdb->posts.post_type = 'projects'
AND $wpdb->posts.post_status = 'publish'
ORDER BY $wpdb->posts.post_date DESC
";
$pageposts = $wpdb->get_results($querydetails, OBJECT);
if ($pageposts) {
foreach ($pageposts as $post) {
setup_postdata($post);
$postID = get_the_ID();
echo '<option value="';
echo $postID . '"';
foreach ($meta as $m) {
if ($postID == $m) echo ' selected="selected" ';
}
echo '>';
echo the_title();
echo '</option>';
}
}
echo "</select>";
$this->show_field_end($field, $meta);
$post = $originalpost;