How to build a complex page structure

Let’s say i need a page structured like the image below.

Structure
There is a frontpage and from there i can choose one of the sites partners. Every partner gets a additional “partner page” which has to be editable from within the dashboard. Below the description of the partner would be a list of projects the partner has done. Every project is also fully editable.

Best case scenario would be a permalink structure like this:

  • Partner: www.example.org/partner1
  • Project: www.example.org/partner1/project-name

I dont know which approach is the best for this, should i build categories or taxonomies? This all seems tedious because there will be more than 100 partners and their projects.

I have build a lot of themes but never with a structure like this, so what is the best way to solve this ? (Categories, Taxonomy, CPT, some Plugin …)

Solutions Collecting From Web of "How to build a complex page structure"

I would not use WordPress pages nor articles for this.
Simply, create a new custom post type called “Projects”, with a plugin like Types, then create a new custom taxonomy “Partners” and associate it with that custom post type.
Clean and easy structure.

You can use page post type.

  • Simple to use.
  • Easy to edit with page-builder tools/plugins.
  • The permalink structure example.com/parent-page/child-1/child-1.1 is already available.

With “Categories”, “Taxonomies” or “CPT”, you have to register and rewrite permalink structures.

Home – Create this as a page.

Partners – Create this is a custom post type since they need single pages (something like example.com/partner/partner1).

Projects – Create a taxonomy called “projects”. The terms of that taxonomy will be your projects. Associate your taxonomy with the “partners” custom post type you created. This is the best way to share the same projects across partners.

Edit: If you want to create a permalink structure like example.com/{partner}/{project} then you can easily do that using custom rewrite rules.

add_rewrite_rule(
    'partner/([A-Za-z0-9\-\_]+)/?$',
    'index.php?pagename={your-template-slug}&project_slug=$matches[1]',
    'top'
);

Using WordPress query vars you can access the project_slug variable in your template and get the term object using get_term_by().

My proposed structure takes full advantage of how the WordPress core was designed. Doing it this way is also the most flexible way of structuring it, allowing you to easily add new templates in the future if your client requests them, whether it’s an archive of all the projects, viewing projects associated to multiple specific partners, partner profiles without projects, etc.

The custom rewrite rules are completely optional, btw, but you’d need them if you want your custom permalink structure and want to use this data structure.

Edit: -1 points? Alright… this site has gotta be filled with amateurs.