Data/Content Architecture in WordPress 3.1

Update

I solved it in that way:

What you need:

  1. Custom Post Type
  2. Enabled Plugin “Posts 2 Posts” (see comments below)
  3. Enabled Plugin “Allow numeric stubs

You’ll need the Plugin “Posts 2 Posts” to assign posts tp pages. “Allow numeric stubs” is a plugin that will allow you to have numeric slugs for pages. If try to add pages named to 2011 or 2012 you’ll get Page-Slugs like 2011-2 or 2012-2 because it is not possible to have a page slug that is a number.

Read More

First you have to add some Pages. For Example 2011, Nominees and Actors. Now you arrange the Pages as childs to your needs.

2011
    -Nominees
        --Actors

Your Url will now look like http://example.com/2011/nominees/actors

Now you have to add a Custom Post Type which contains your nominees. Add some nominees to your Post Type (should work with Articles too).

Register a connection type in your functions.php

function my_connection_types() {
    // Make sure the Posts 2 Posts plugin is active.
    if ( !function_exists( 'p2p_register_connection_type' ) )
        return;

    p2p_register_connection_type( array(
        'id' => 'posts_pages',
        'from' => 'page',
        'to' => 'nominees' // Your Post-Type
    ) );
}
add_action( 'init', 'my_connection_types', 100 );

Now go to your Actor-Page, look for a MetaBox named “Connected Nominees” and add your nominees.

Edit your page.php

<article class="single entry">

    <header class="post post-header">

        <h1><?php the_title(); ?></h1>            

    </header>

    <section class="post post-content">

        <?php the_content(); ?>

        <?php
        // Find connected pages
        $connected = p2p_type( 'posts_pages' )->get_connected( get_queried_object_id() );

        // Display connected pages
        if ( $connected->have_posts() ) :
        ?>

        <?php while ( $connected->have_posts() ) : $connected->the_post(); ?>
            <h2><?php the_title(); ?></h2>
            <?php the_content(); ?>
        <?php endwhile; ?>


        <?php 
        // Prevent weirdness
        wp_reset_postdata();

        endif;
        ?>
    </section>

</article>

Now you should be able to see you asigned Posts (nominees) on your Page Actors.

The solution is easy to understand for authors since they are working with default wordpress behaviors and the content connection process feels really native.


I’m looking for some data architecture best practices in WordPress 3.1.n

Here are the facts:

  • It is some kind of award
  • The Award has **n** different categories
  • People could be nominated
  • Each nominee could be asscociated with 1 category
  • Each category is grouped by year
  • Each category can contain up to 3 or 5 nominees

Categories/Terms(?)

2011

  • actor
  • special-effects
  • story

2012

  • actor
  • special-effects
  • story

For Example:

Note: Custom Post-Types and Custom Taxonomies are fine but i can’t get hirachical Taxonomy-Terms work.

Does anyone have some suggestions to solve this with WordPress?

Related posts

Leave a Reply

1 comment

  1. You might consider creating an “Award” post type with categories being the types of awards… Best Actor, Special Effects, etc. Also you could tag each award post by what year it is. I like tagging the year vs a year as a category because it gives you the option to build and scale content by year as the site grows. However a category would work as well.

    Then, perhaps create an Actor post type with each actors name, this would have the added benefit of being scaleable should you want to expand on actor profiles down the road. Then consider connecting them using something like the “Posts 2 Posts” plugin. Plugin here

    This plugin is great for associating posts with other posts like a “review” post with a “product” post. You will essentially be doing the same thing except “review” would be substituted with “award” and “product” would be associated with “actor”.