0

I have created a theme with a custom post type called 'project' and there is a problem. I want to show 5 different custom post type categories on a page in different portions, like posts to show on pages from their respective categories. Is there any solution?

This is my custom post type code with custom taxonomy

 <?php
    /**
     * Registers a custom post type.
     */
    function Project_post_type()
    {
        register_post_type(
            'Project',
            array(
    'labels'               => array(
    'name'                => __('Project', 'text_domain'),
    'singular_name'       => __('Project', 'text_domain'),
    'menu_name'           => __('Project', 'text_domain'),
    'name_admin_bar'      => __('Project Item', 'text_domain'),
    'all_items'           => __('All Items', 'text_domain'),
    'add_new'             => _x('Add New', 'prefix_portfolio', 'text_domain'),
    'add_new_item'        => __('Add New Item', 'text_domain'),
    'edit_item'           => __('Edit Item', 'text_domain'),
    'view_item'           => __('View Item', 'text_domain'),
    'search_items'        => __('Search Items', 'text_domain'),
    'not_found'           => __('No items found.', 'text_domain'),
    'not_found_in_trash'  => __('No items found in Trash.', 'text_domain'),
    'parent_item_colon'   => __('Parent Items:', 'text_domain'),
                ),
    'public'     => true,
    'menu_position'  => 5,
    'supports'    => array(
                    'title',
                    'editor',
                    'thumbnail',
                    'excerpt',
                    'custom-fields',
                ),
    'taxonomies'   => array(
                    'Project_categories',
                ),

    'menu_icon'   => get_template_directory_uri() . '/img/project-icon.png',
    'has_archive' => true,
    'query_var'  => true,
    'rewrite' => array(
    'slug'    => 'Project',
    ),
    )
   );
    }

    add_action('init', 'Project_post_type');


    /**
     * Registers a custom taxonomy.
     */
    function Project_taxonomy()
    {
        register_taxonomy(
            'Project_categories',
            array(
                'Project',
            ),
    array(
    'labels'               => array(
    'name'                => _x('Categories', 'prefix_portfolio', 'text_domain'),
    'singular_name'       => _x('Category', 'prefix_portfolio', 'text_domain'),
    'menu_name'           => __('Categories', 'text_domain'),
    'all_items'           => __('All Categories', 'text_domain'),
    'edit_item'           => __('Edit Category', 'text_domain'),
    'view_item'           => __('View Category', 'text_domain'),
    'update_item'         => __('Update Category', 'text_domain'),
    'add_new_item'        => __('Add New Category', 'text_domain'),
    'new_item_name'       => __('New Category Name', 'text_domain'),
    'parent_item'         => __('Parent Category', 'text_domain'),
     'parent_item_colon'   => __('Parent Category:', 'text_domain'),
    'search_items'        => __('Search Categories', 'text_domain'),
                ),
    'show_admin_column'    => true,
    'hierarchical'   => true,
   'rewrite'   => array(
  'slug'    => 'portfolio/category',
 ),
)
);
}

add_action('init', 'Project_taxonomy', 0);

function theme_prefix_rewrite_flush() {
flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'theme_prefix_rewrite_flush' );

Here is my code to display one category

$args = array(
'post_type' => 'project',
'posts_per_page' => 200, 
'cat' => 'Initiatieffase'
    );
$loop = new WP_Query($args); while ($loop->have_posts()) : $loop->the_post();
echo '<li><a href="' . the_permalink() . '">' . the_post_thumbnail() . '</a></li>';
endwhile;
wp_reset_query();

EDIT

This is my new post type function

<?php
// Register Custom Post Type
function project_post_type() {

    $labels = array(
        'name'                => _x( 'Projects', 'Post Type General Name', 'text_domain' ),
        'singular_name'       => _x( 'Project', 'Post Type Singular Name', 'text_domain' ),
        'menu_name'           => __( 'Project', 'text_domain' ),
        'parent_item_colon'   => __( 'Parent Item:', 'text_domain' ),
        'all_items'           => __( 'All Items', 'text_domain' ),
        'view_item'           => __( 'View Item', 'text_domain' ),
        'add_new_item'        => __( 'Add New Item', 'text_domain' ),
        'add_new'             => __( 'Add New', 'text_domain' ),
        'edit_item'           => __( 'Edit Item', 'text_domain' ),
        'update_item'         => __( 'Update Item', 'text_domain' ),
        'search_items'        => __( 'Search Item', 'text_domain' ),
        'not_found'           => __( 'Not found', 'text_domain' ),
        'not_found_in_trash'  => __( 'Not found in Trash', 'text_domain' ),
    );
    $args = array(
        'label'               => __( 'project_post_type', 'text_domain' ),
        'description'         => __( 'Project Description', 'text_domain' ),
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'thumbnail', ),
        'taxonomies'          => array( 'category', 'post_tag' ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_icon' => get_template_directory_uri() . '/img/project-icon.png',
        'menu_position'       => 5,
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post',
    );
    register_post_type( 'project_post_type', $args );

}

// Hook into the 'init' action
add_action( 'init', 'project_post_type', 0 );


// Register Custom Taxonomy
function project_taxonomy() {

    $labels = array(
        'name'                       => _x( 'Projects', 'Taxonomy General Name', 'text_domain' ),
        'singular_name'              => _x( 'Project', 'Taxonomy Singular Name', 'text_domain' ),
        'menu_name'                  => __( 'Project', 'text_domain' ),
        'all_items'                  => __( 'All Items', 'text_domain' ),
        'parent_item'                => __( 'Parent Item', 'text_domain' ),
        'parent_item_colon'          => __( 'Parent Item:', 'text_domain' ),
        'new_item_name'              => __( 'New Item Name', 'text_domain' ),
        'add_new_item'               => __( 'Add New Item', 'text_domain' ),
        'edit_item'                  => __( 'Edit Item', 'text_domain' ),
        'update_item'                => __( 'Update Item', 'text_domain' ),
        'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ),
        'search_items'               => __( 'Search Items', 'text_domain' ),
        'add_or_remove_items'        => __( 'Add or remove items', 'text_domain' ),
        'choose_from_most_used'      => __( 'Choose from the most used items', 'text_domain' ),
        'not_found'                  => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => false,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => true,
    );
    register_taxonomy( 'project', array( 'post' ), $args );

}

// Hook into the 'init' action
add_action( 'init', 'project_taxonomy', 0 );


function theme_prefix_rewrite_flush() {
flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'theme_prefix_rewrite_flush' );

and this is template function

<?php
  $args = array(
  'post_type' => 'project',
   'tax_query' => array(
    array(
    'taxonomy' => 'Initiatieffase',
     'field' => 'slug',
      'terms' => 'bob'
       )
     )
  );
$query = new WP_Query( $args );
$loop = new WP_Query($args);
while ($loop->have_posts()) : $loop->the_post(); ?>
<li>
 <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a></li>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>

but its still showing nothing


This is my new post type function

<?php
// Register Custom Post Type
function project_post_type() {

    $labels = array(
        'name'                => _x( 'Projects', 'Post Type General Name', 'text_domain' ),
        'singular_name'       => _x( 'Project', 'Post Type Singular Name', 'text_domain' ),
        'menu_name'           => __( 'Project', 'text_domain' ),
        'parent_item_colon'   => __( 'Parent Item:', 'text_domain' ),
        'all_items'           => __( 'All Items', 'text_domain' ),
        'view_item'           => __( 'View Item', 'text_domain' ),
        'add_new_item'        => __( 'Add New Item', 'text_domain' ),
        'add_new'             => __( 'Add New', 'text_domain' ),
        'edit_item'           => __( 'Edit Item', 'text_domain' ),
        'update_item'         => __( 'Update Item', 'text_domain' ),
        'search_items'        => __( 'Search Item', 'text_domain' ),
        'not_found'           => __( 'Not found', 'text_domain' ),
        'not_found_in_trash'  => __( 'Not found in Trash', 'text_domain' ),
    );
    $args = array(
        'label'               => __( 'project_post_type', 'text_domain' ),
        'description'         => __( 'Project Description', 'text_domain' ),
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'thumbnail', ),
        'taxonomies'          => array( 'category', 'post_tag' ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_icon' => get_template_directory_uri() . '/img/project-icon.png',
        'menu_position'       => 5,
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post',
    );
    register_post_type( 'project_post_type', $args );

}

// Hook into the 'init' action
add_action( 'init', 'project_post_type', 0 );


// Register Custom Taxonomy
function project_taxonomy() {

    $labels = array(
        'name'                       => _x( 'Projects', 'Taxonomy General Name', 'text_domain' ),
        'singular_name'              => _x( 'Project', 'Taxonomy Singular Name', 'text_domain' ),
        'menu_name'                  => __( 'Project', 'text_domain' ),
        'all_items'                  => __( 'All Items', 'text_domain' ),
        'parent_item'                => __( 'Parent Item', 'text_domain' ),
        'parent_item_colon'          => __( 'Parent Item:', 'text_domain' ),
        'new_item_name'              => __( 'New Item Name', 'text_domain' ),
        'add_new_item'               => __( 'Add New Item', 'text_domain' ),
        'edit_item'                  => __( 'Edit Item', 'text_domain' ),
        'update_item'                => __( 'Update Item', 'text_domain' ),
        'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ),
        'search_items'               => __( 'Search Items', 'text_domain' ),
        'add_or_remove_items'        => __( 'Add or remove items', 'text_domain' ),
        'choose_from_most_used'      => __( 'Choose from the most used items', 'text_domain' ),
        'not_found'                  => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => false,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => true,
    );
    register_taxonomy( 'project', array( 'post' ), $args );

}

// Hook into the 'init' action
add_action( 'init', 'project_taxonomy', 0 );


function theme_prefix_rewrite_flush() {
flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'theme_prefix_rewrite_flush' );

and this is template function

<?php
  $args = array(
  'post_type' => 'project',
   'tax_query' => array(
    array(
    'taxonomy' => 'Initiatieffase',
     'field' => 'slug',
      'terms' => 'bob'
       )
     )
  );
$query = new WP_Query( $args );
$loop = new WP_Query($args);
while ($loop->have_posts()) : $loop->the_post(); ?>
<li>
 <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a></li>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>

but its still showing nothing

  • Please indent your code properly, half of it is out of screen, making it extremely difficult to read. Thank you – Pieter Goosen Aug 16 '14 at 18:16
  • cat should be a category ID, not a name or slug. Also, don't use wp_reset_query, you should use wp_reset_postdata – Pieter Goosen Aug 16 '14 at 18:49
  • can you give me a code how to use that ? i didn't understand you thanks – kamran shahid Aug 16 '14 at 18:53
  • Check out the codex for examples. Also make sure that you are using built-in categories. If you are using custom taxonomies, you should be using the tax_query parameters, not category parameters – Pieter Goosen Aug 16 '14 at 19:01
  • i tried tax-query it didn't work for me , and can you send me modified version of this code ? – kamran shahid Aug 16 '14 at 19:08
1

You have serious issues with your naming conventions, structure of your functions, invalid usage of reserved names and wrong values passed to parameters

First, naming coventions. Function names should be lowercase letters, should not start with a letter and words should be divided by underscores (_). The same goes for custom post type and taxonomy names. Drop your capital letters. The same goes for rewrite rules

Secondly, don't create multiple instances that should be hooked to the same function. Properly group your code together in one function, and add that one function to your intended hook, in this case init

Thirdly, don't use reserved names, even to rewrite slugs. It is confusing and might conflict later with the template hierarchy. In your case, you've use category, which is a reserved name.

Lastly, have a look at the codex for the correct values that should be passed to a particular parameter. cat excepts only category ID's, not slugs or name. BTW, you are making use of a custom taxonomy, so you should use the tax_query parameter and not the category parameters.

For reference

EDIT

One thing I forgot to add, wp_reset_query is suppose to be used with query_posts, which you should never use. Whenever using WP_Query and get_posts, you need to reset your custom query with wp_reset_postdata

EDIT 2

You've missed a couple of points here that I spoke about. What is confusing is that you've changed a few things you've should have. Before I post code just a few extra things

  • When you create a custom taxonomy, and you need to it to function like build-in categories, you need to set hierarchical to true. When you set it to false, your custom taxonomy behave like build-in post tags

  • Whenever you create a "category" in a custom taxonomy, it is known as a term.

  • Your taxonomy is called project, yet you pass Initiatieffase (which I think might be a term of the taxonomy project to the taxonomy parameter.

  • When you set field in your tax_query to slug, you have to use the slug of your term in the terms parameter, not the name of the term.

  • Your custom post type is called project_post_type but you pass project (which is your taxonomy name) to the post_type parameter in your custom query

This is how your code should look like

<?php
// Register Custom Post Type
function create_cpt_and_ct() {

    $labels1 = array(
        'name'                => _x( 'Projects', 'Post Type General Name', 'text_domain' ),
        'singular_name'       => _x( 'Project', 'Post Type Singular Name', 'text_domain' ),
        'menu_name'           => __( 'Project', 'text_domain' ),
        'parent_item_colon'   => __( 'Parent Item:', 'text_domain' ),
        'all_items'           => __( 'All Items', 'text_domain' ),
        'view_item'           => __( 'View Item', 'text_domain' ),
        'add_new_item'        => __( 'Add New Item', 'text_domain' ),
        'add_new'             => __( 'Add New', 'text_domain' ),
        'edit_item'           => __( 'Edit Item', 'text_domain' ),
        'update_item'         => __( 'Update Item', 'text_domain' ),
        'search_items'        => __( 'Search Item', 'text_domain' ),
        'not_found'           => __( 'Not found', 'text_domain' ),
        'not_found_in_trash'  => __( 'Not found in Trash', 'text_domain' ),
    );
    $args1 = array(
        'label'               => __( 'project_post_type', 'text_domain' ),
        'description'         => __( 'Project Description', 'text_domain' ),
        'labels'              => $labels1,
        'supports'            => array( 'title', 'editor', 'thumbnail', ),
        'taxonomies'          => array( 'project' ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_icon'           => get_template_directory_uri() . '/img/project-icon.png',
        'menu_position'       => 5,
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post',
    );
    register_post_type( 'project_post_type', $args1 );

    $labels2 = array(
        'name'                       => _x( 'Projects', 'Taxonomy General Name', 'text_domain' ),
        'singular_name'              => _x( 'Project', 'Taxonomy Singular Name', 'text_domain' ),
        'menu_name'                  => __( 'Project', 'text_domain' ),
        'all_items'                  => __( 'All Items', 'text_domain' ),
        'parent_item'                => __( 'Parent Item', 'text_domain' ),
        'parent_item_colon'          => __( 'Parent Item:', 'text_domain' ),
        'new_item_name'              => __( 'New Item Name', 'text_domain' ),
        'add_new_item'               => __( 'Add New Item', 'text_domain' ),
        'edit_item'                  => __( 'Edit Item', 'text_domain' ),
        'update_item'                => __( 'Update Item', 'text_domain' ),
        'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ),
        'search_items'               => __( 'Search Items', 'text_domain' ),
        'add_or_remove_items'        => __( 'Add or remove items', 'text_domain' ),
        'choose_from_most_used'      => __( 'Choose from the most used items', 'text_domain' ),
        'not_found'                  => __( 'Not Found', 'text_domain' ),
    );
    $args2 = array(
        'labels'                     => $labels2,
        'hierarchical'               => true,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => true,
    );
    register_taxonomy( 'project', 'project_post_type', $args2 );

}

// Hook into the 'init' action
add_action( 'init', 'create_cpt_and_ct', 0 );


function theme_prefix_rewrite_flush() {
flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'theme_prefix_rewrite_flush' );

And for your tax_query

<?php
$args = array(
    'post_type' => 'project_post_type',
    'tax_query' => array(
        array(
            'taxonomy' => 'project',
            'field' => 'slug',
            'terms' => 'Initiatieffase' //THIS MUST BE YOUR TERM SLUG, NOT NAME
        )
    )
);
$query = new WP_Query( $args );
$loop = new WP_Query($args);
while ($loop->have_posts()) : $loop->the_post(); 
?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a>
    </li>
<?php 
endwhile; 

wp_reset_postdata();
?>

ADDITIONAL READING

-Debugging in Wordpress

EDIT 3

For proper naming and the correct use of templates, go and check the Template Hierarchy in the codex. This should help you out a lot in future

Your single page would be single-{$post_type}.php which translates to single-project_post_type.php. Same goes for your archive page.

As for your custom taxonomy page, you can use taxonomy-$taxonomy.php which translates to taxonomy-project.php

  • Please see my update. This should work for you – Pieter Goosen Aug 17 '14 at 6:03
  • thanks it worked lot of thanks you are really helpful guy thanks – kamran shahid Aug 17 '14 at 11:55
  • sorry to bother you but last question what would be the name of single page template ? project-post-type-single.php or project-single.php ? – kamran shahid Aug 17 '14 at 12:01
  • how can i give you feedback or appreciate you for helping me out ? – kamran shahid Aug 17 '14 at 12:10
  • Look at the left hand side of my answer. There are a up/down vote arrow. Just below those arrows are a check mark. Click on that check mark. This will then go green, which gives me credit and shows that the question is resolved. Check out our tour page as well to get an idea of how the site works :-) – Pieter Goosen Aug 17 '14 at 12:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.