Specify a particular page to list all custom types

The posts page is a special case that’s hardcoded into core- it lets a page’s main query be converted to a posts query. In this situation, the posts page ceases to be a “page” in the conventional sense- is_page is false, you can’t access the page’s content, etc.. Doing this page-query-to-posts-query conversion with the main query for any other sort of page is tricky, it involves quite a bit of request manipulation. I’ve never been able to make it work 100% without issue.

What you can do a bit more easily, is a more dynamic version of your page-properties.php template file, using template filters.

The idea is to store the ID of which page you’d like as your properties page, and filter the template hierarchy to override the template for that page with your custom template. This also has the bonus benefit of letting you use both the page’s content, while running a secondary custom loop for the post type posts.

function wpd_properties_page_template( $page_template="" ){
    // globalize the queried page object, so we can access its ID
    global $post;
    // check if this page's ID is equal to the value stored in the option
    if( $post->ID == get_option( 'my_page_id_option' ) ){
        // locate the special template
        // this also lets a child theme override the parent theme version
        $page_template = locate_template( 'your-special-template.php', false );
    }
    return $page_template;
}
add_filter( 'page_template', 'wpd_properties_page_template' );