Код представленный ниже нужно вставить в functions.php вашей темы. Это функция, которая добавляет шорткод [cities], который вы можете поставить там где нужно. У шорткода есть два атрибута parent, чтобы указать ID родительской страницы и key - чтобы можно было вывести не только town_name, но и любое другое поле
Вариант применения: [cities parent=123]
// Add Cities Shortcode
function cities_shortcode( $atts ) {
// Список возможных параметров шорткода: родительская страница и имя поля, значение которого нужно вывести
$atts = shortcode_atts(
array(
'parent' => '',
'key' => 'town_name'
),
$atts
);
// Задаем параметры WP_Query, чтобы получить список всех нужных страниц в одном объекте
$args = array(
'post_type' => array( 'page' ),
'post_status' => array( 'publish' ),
'post_parent' => $atts[parent]
);
//Объект WP_Query
$page_query = new WP_Query( $args );
//Обертка для всех элементов, которые получатся, можно вставить свои классы
$result_start = '<ul class="cities-list">';
$result_end = '</ul>';
//Цикл, выводим все города
while ( $page_query->have_posts() ):
$page_query->the_post();
$post_id = get_the_ID(); //ID Страницы
$city_name = get_post_meta( $post_id, $atts[key], true ); //Название города
$result = $result . '<li class="cities-item"><a href="' . get_the_permalink() . '">' . $city_name . '</a></li>'; //Название города, ссылка, + обертка из <li>
endwhile;
wp_reset_postdata();
return $result_start . $result . $result_end;
}
add_shortcode( 'cities', 'cities_shortcode' );