WordPress.org

Ready to get started?Download WordPress

Forums

Checking if you are on a category AND a specific page ID / page name (16 posts)

  1. sixfootjames
    Member
    Posted 2 years ago #

    Hi,

    I have an if statement checking that a certain category exists and if it does, to add an additional button to that page. There are three pages where this needs to happen and they are all working fine. There is another page on the site which also makes use of one of the categories called news and here too the buttons are being displayed which is not what I want.

    My solution would be to check first if the category exists, if it does, then add the button. Then I would add another statement to check if I am on a certain page/ID and exclude it from that page.
    I have tried a number of options but my inexperience of WP fails me and I am hoping someone might be able to show me how it is done. Here's a snippet of the code.

    function add_below_the_post () {
    
    	$category = get_the_category();
    	$category = $category[0]->category_nicename;
    
    	if (!is_wp_error($category))
    	{
    		if ($category == 'student-stories')
    		{
    			echo('<a class="postFootLink" href="' .site_url() .'/people/student-stories/">Return to ' .$category .'</a>');
    		} else if ($category == 'news' & $postID == '16') //this is where I am going wrong
    		{
    			echo('<a class="postFootLink" href="' .site_url() .'/news/">Return to ' .$category .'</a>');
    
    		} else if ($category == 'research')
    		{
    			echo('<a class="postFootLink" href="' .site_url() .'/research/research-snippet/">Return to ' .$category .' snippets</a>');
    		}
    
    	}
    }
    
    add_action('thematic_belowpost', 'add_below_the_post');

    Many thanks!

  2. Perhaps something like this would work.
    http://pastebin.com/RKab5zNK

    This page might also be helpful:
    http://codex.wordpress.org/Function_Reference/is_page

  3. sixfootjames
    Member
    Posted 2 years ago #

    Hi Josh,

    Thanks for getting back to me and your example. I tried it and a multitude of other options and still I am having some problems with it.

    The latest option I have tried is to exclude the page I dont want the link to be echoed onto using IS NOT !is_page('news-events'). Like this...

    else if ($category == 'news' && !is_page('news-events'))
    {
    echo('<a class="postFootLink" href="' .site_url() .'/news/news-events/">Return to ' .$category .'</a>');
    }

    I tried your method too but it seems to ignore it completely. Could it have to do with where this function is being called and that it is ignoring the is_page() call altogether?

    Thanks again

  4. sixfootjames
    Member
    Posted 2 years ago #

    Here is another option I have tried.

    else if ($category == 'news')
    {
    	if (is_page_template('template-page-news.php'))
    	{
    		echo('WORKING');
    	} else
    	{
    		echo('<a class="postFootLink" href="' .site_url() .'/news/news-events/">Return to ' .$category .'</a>');
    	}
    }

    Now I know for sure that it is using the template "template-page-news.php" so it should write "WORKING" to the page and yet it doesn't do this which leaves me wondering why this would not work within the add_action() function of Thematic wireframe.

    Many thanks!

  5. keesiemeijer
    moderator
    Posted 2 years ago #

    Maybe try this:

    global $post;
    else if ($category == 'news' && $post->ID == '16'){ ... }

    and for testing if the category is correct:

    $category = $category[0]->category_nicename;
    echo 'The category = ' . $category;
  6. lee@digitalacorn
    Member
    Posted 2 years ago #

    debuging is what is needed.

    check what $category has returned. (might even be a capitalisation thing)

    find the ID of the page and do a conditional against it

    is_page(10)

    when debugging remove if's and else's till you know the first is working.

  7. sixfootjames
    Member
    Posted 2 years ago #

    Thanks for the replies. The problem I am having is when I debug for the post ID, it returns all the categories within the loop. You can see it here.

    Above the title you will see I am writing the Post ID of that page (181). Below that and in the loop, you can see I am writing out the POST ID of each ID of news item.

    This page (news-events) is made up of two parts; a template page called template-page-news.php and functions.php where the add_action() function is adding content below the post like so:

    add_action('thematic_belowpost', 'add_below_the_post');

    It would seem that the page's ID is not being passed into the loop when I check it like this:

    else if ($category == 'news' && $post->ID != '181'))
    {
    	echo('<a class="postFootLink" href="' .site_url() .'/news/news-events/">Return to ' .$category .'</a>');
    }

    If I do this however from one of the known ID's in that loop, I can get rid of the button

    else if ($category == 'news' && ($post->ID == '1188'))
    {
    	echo('<a class="postFootLink" href="' .site_url() .'/news/news-events/">Return to ' .$category .'</a>');
    }

    I know this is going to be something simple when the lights go on :)

    Thanks again!

  8. keesiemeijer
    moderator
    Posted 2 years ago #

    Not really sure what you want to do? The Page ID is 181 and is not in your custom loop. Pages don't have categories.

  9. lee@digitalacorn
    Member
    Posted 2 years ago #

    presume the missing ( is a forum typo and not on the site?

    else if ($category == 'news' && $post->ID != '181'))
    {
    	echo('<a class="postFootLink" href="' . get_bloginfo('url') .'/news/news-events/">Return to ' .$category .'</a>');
    }

    I'm not sure what you want to achieve either... Surely the link should only be on single posts pages or most of the time it will be a link to itself?

    I would do something like this from the functions file (I might have miss understood your objective)

    add_action('thematic_belowpost', 'add_link_to_cat');
    function add_link_to_cat()
    {
    	global $post;
    	if (is_single())
    	{
    		$cat_array = get_the_category();
    		$cat = $cat_array[0]->name;
    		$cat_slug =  $cat_array[0]->slug;
    		echo('<a class="postFootLink" href="' . get_bloginfo('url') .'/' . $cat_slug . '">Return to ' .$cat .'</a>');
    	}
    }

    That would give back buttons to categorys in single posts.

    PS. get_bloginfo('url') may or may not return a trailing slash - i don't remember.

  10. sixfootjames
    Member
    Posted 2 years ago #

    Thanks fore replying Keesiemeijer.

    Basically what's happening is that two pages share the same category, "news".

    This one: http://goo.gl/GvVuf
    And this one: http://goo.gl/u89CE

    From the latter page, the news list page (http://goo.gl/u89CE), I need to remove the "Return To News" links as we are already on this page.

    So in my IF statement, I need to exclude the links by either checking if we're using a certain category, page ID or template...all of which I have tried and all of which don't seem to work.

    Many thanks again.

  11. lee@digitalacorn
    Member
    Posted 2 years ago #

    Make a new template file for news-and-events and add your code to the template file in question instead of the functions file. ...

    add_action('thematic_belowpost', 'add_below_the_post');
    function add_below_the_post()
    {
     //do something
    }

    It will only take effect in that template.

  12. sixfootjames
    Member
    Posted 2 years ago #

    Hi Lee.

    The two pages are already using two different templates.

    I have systematically removed the hooks from my template-page-news.php (or your equivalent to "news-and-events") template to see if I can remove it.

    There are two hooks in this template:

    thematic_indexloop();
    &
    thematic_belowcontent()

    From the bottom up, I have removed these hooks and nothing happens until I remove thematic_indexloop(). Only then do all most posts go missing which is understandable.

    This then leaves me thinking that add_below_post() is being called every time within that loop.

    See my dilemma? :)

  13. keesiemeijer
    moderator
    Posted 2 years ago #

    So you need to get the page ID or name.

    Have you tried with global $pagename; in the function add_below_the_post().

    global $pagename;
    if ($pagename == 'news-events') {
    //do stuff
    }

    Or with this on the Page template before the query and loop:

    <?php
        global $my_page_id;
        $my_page_id = $post->ID;
        echo $my_page_id;
    ?>

    and in the function add_below_the_post():

    //to get the current Page ID
    global $my_page_id;
    $the_page_id = $my_page_id;
    echo $the_page_id;
  14. sixfootjames
    Member
    Posted 2 years ago #

    I have a feeling that might work! Let me give it a try and get back to you. I think the answer is in the global variable! Be back soon :)

  15. sixfootjames
    Member
    Posted 2 years ago #

    Final working code snippet...thanks everyone!

    function add_below_the_post () {
    
    	global $post;
    	$category = get_the_category();
    	$category = $category[0]->category_nicename;
    
    	global $pagename;
    	$news_page_name = $pagename;
    
    	if (!is_wp_error($category))
    	{
    		if ($category == 'student-stories')
    		{
    			echo('<a class="postFootLink" href="' .site_url() .'/people/student-stories/">Return to ' .$category .'</a>');
    		}
    		else if ($category == 'news' && $news_page_name != 'news-events')
    		{
    			echo('<a class="postFootLink" href="' .site_url() .'/news/news-events/">Return to ' .$category .'</a>');
    		}
    		else if ($category == 'research')
    		{
    			echo('<a class="postFootLink" href="' .site_url() .'/research/research-snippet/">Return to ' .$category .' snippets</a>');
    		}
    
    	}
    }
    
    add_action('thematic_belowpost', 'add_below_the_post');
  16. keesiemeijer
    moderator
    Posted 2 years ago #

    Glad you got it resolved!

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags

No tags yet.