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="https://wordpress.stackexchange.com/questions/108645/link_to_post_type1_story" class="active">Post type 1</a><li>
<?php else: ?>
<li><a href="https://wordpress.stackexchange.com/questions/108645/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

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.

Leave a Reply

Your email address will not be published. Required fields are marked *