Во-первых, форматируйте код адекватно, эти длинные строки читать - адски неудобно (особенно отлавливать ваши двойные $$, лишние скобки и тд):
// Параметры удобнее задавать отдельно
$args = array(
'post_type' => APP_POST_TYPE,
'ignore_sticky_posts' => true,
'meta_query' => array(
array(
'key' => 'cp_category',
'value' => 'Не определено',
'compare' => '=',
),
),
);
// Получаем массив постов.
$categories = get_posts( $args );
// Перебираем массив, обязательно as $post, чтобы корректно работала функция setup_postdata()
foreach( $categories as $post ) {
// Устанавливаем текущую запись в глобальный scope
setup_postdata( $post );
// Подключаем шаблон, который уже сможет видеть корректные данные из глобального scope
get_template_part( 'loop', 'ad_listing' );
}
// Очищаем глобальный scope
wp_reset_postdata();
Не тестил, но должно работать.