Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

In my website I have three custom post types: scripts, scenes and plugins. When visiting the archive page of a single post type (i.e. by going to mysite.com/plugins) you correctly see all the posts of that type.

In archive.php, how can I find out which custom post type the user is looking at right now?

I tried the following:

<?php 
    global $post; 
    $postTypeLabels = get_post_type_labels(get_post_type_object($post)); 
    echo var_export($postTypeLabels); 
?>

But I'm getting the this:

Post name is stdClass::__set_state(
  array( 'name' => 'Posts', 
    'singular_name' => 'Post', 
    'add_new' => 'Add New', 
    'add_new_item' => 'Add New Post', 
    'edit_item' => 'Edit Post', 
    'new_item' => 'New Post', 
    'view_item' => 'View Post', 
    'search_items' => 'Search Posts', 
    'not_found' => 'No posts found.', 
    'not_found_in_trash' => 'No posts found in Trash.', 
    'parent_item_colon' => NULL, 
    'all_items' => 'All Posts', 
    'menu_name' => 'Posts', 
    'name_admin_bar' => NULL, 
  )
)

I'm guessing that, since I am in an archive page, the $post is not correct.

P.S. I know that I can create archive-plugins.php for the plugins archive. Unfortunately, I have installed a theme that, as far as I know, kinda prevents that. So this is not an option.

share|improve this question
add comment

2 Answers

up vote 2 down vote accepted

There are a several of ways to do this. Put:

var_dump($wp_query->query,get_queried_object()); die;

In your archive.php and you should see two of those ways.

$wp_query->query will have post_type component for custom post types. That will not be there for post post types. get_queried_object will return quite a bit of data for custom post types but null for post post type.

There are also some related template tags that might help. is_post_type_archive comes to mind.

Between those you should have the information you need to put together whatever logic you need. It is not clear from you question what the end result is supposed to be, so I can't really write much.

Since you specifically named archive.php that is what I tested in. You may need different code for some other template, especially with get_queried_object which returns very different information depending on the context.

share|improve this answer
    
get_query_object() was what I was looking for. I was basically looking for how to get the name of the custom post type, but I'd rather keep the question more open for anybody else. Thanks. –  pek Mar 17 '13 at 23:18
    
Basically, this is what I did to get the name of the custom post type in the archive.php: $qObj = get_queried_object(); echo $qObj->labels->name; –  pek Mar 17 '13 at 23:19
add comment

No other nice option rather than template making!

Or Including a template file when that custom post type archive (according to its url) is accessed.

See further links for more info:

http://codex.wordpress.org/Function_Reference/load_template

wordpress - load a template based on the URI

http://www.mihaivalentin.com/wordpress-tutorial-load-the-template-you-want-with-template_redirect/

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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