4

I'm creating menu in wordpress and I would like add class="active" to link when its page is active. I'm not using inbuilt wordpress menu feature.

I'm making menu hardcoded in header.php because this menus are linked to custom posttype archive pages. So I would like to keep class active if one is inside single or archive page of that posttype.

Here is what i would like to do:

header.php

<?php if ($post_type == "custom_post_type1") : ?>
<li><a href="link_to_post_type1_story" class="active">Post type 1</a><li>
<?php else: ?>
<li><a href="link_to_post_type1_story">Post type 1</a><li>
<?php endif; ?>

<?php if ($post_type == "custom_post_type2") : ?>
<li><a href="link_to_post_type2_story" class="active">Post type 2</a><li>
<?php else: ?>
<li><a href="link_to_post_type2_story">Post type 2</a><li>
<?php endif; ?>

I hope I explained what I'm looking for well.

Thanks.

3 Answers 3

6

you can use get_queried_object, as get_post_type does not work on custom post type (I don't know yet why, more info here)

 $obj = get_queried_object();
 $custom_post_type = $obj->post_type;

then you can proceed with

 if($custom_post_type == "type1"){
    // do something
 } else {
    // etc..
 }

I've tested this in one of the sites I'm working on, I hope it work on yours too..

EDIT:

here is the new code that you can use for archives too:

global $wp_query;

if (is_archive()):  
    $custom_post_type = get_query_var('post_type');
    $custom_taxonomy = get_query_var('taxonomy');
else:
    $obj = get_queried_object();
    $custom_post_type = $obj->post_type;
endif;

I've added a taxonomy type too in case you would need one yourself.

3
  • hi Sorry for replying back late. I tried using get_queried_object, works greatly in single page but not in archive page. Do you know any workaround for that? Thanks. Commented Aug 5, 2013 at 10:49
  • lemme check.. i'll test and cook something up for ya. Commented Aug 5, 2013 at 12:56
  • i've updated the answer.. please tell me if it works. thanks! Commented Aug 5, 2013 at 13:11
1

You can still use the built in menu, even when linking to custom types archive... You just need to insert a custom link with the URL of the custom archive page (in the menu creation page, at the left, click on "link". Like this you don't need to worry about creating the classes manually, and the menu will be easier to maintain :)

1
0

You can use the function get_post_type

<? get_post_type( $post ) ?>

Where $post is the ID or the object of the post you want to check.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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