is_page and query_posts not working correctly

For some reason the following code is displaying both types of posts instead of just the specified post using query_posts. I am not quite sure what is going on, but it appears that the loop is ignoring my condition of is_page('news') or is_page('othernews'). Does anyone have an idea why this might be the case?

<?php 
    if (is_page('news')) :
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        query_posts('news');
    endif;

    if (is_page('othernews')) :
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        query_posts('my-other-news'); ?>
    endif;

    while (have_posts()) : the_post();
        get_template_part( 'part-post');
    endwhile;
?>

Related posts

Leave a Reply

4 comments

  1. Try this whether this works for you,

    <?php 
        if (is_page('news')) :
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
            $query = WP_query(array('post_type' => 'news')); 
        else if (is_page('othernews')) :
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
           $query = WP_query(array('post_type' => 'other-news')); 
        else 
            $query = WP_query(array('post_type' => 'post')); 
        endif;
    
        while ($query->have_posts()) : $query->the_post();
            get_template_part( 'part-post');
        endwhile;
    ?>
    

    The last else condition is to handle if none of the first 2 condition satisfies. So you can remove it if you no need that.

    Hope this helps you.

  2. Your conditional statement is incorrect. If you need one or the other, you need to do something like this

    if(is_page('news')) {
    <--- do something for news --->
    }elseif(is_page('othernews')) {
    <---do something for othernews--->
    }
    

    And PLEASE PLEASE PLEASE, don’t use query_posts, it is evil. Rather use WP_Query

  3. <?php 
    
    if (is_page('news')) {
      $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
      query_posts('news'); 
    }
    
    if (is_page('othernews')) {
      $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
      query_posts('my-other-news'); }
    
    ?>
    
        <?php while (have_posts()) : the_post(); ?>             
        <?php get_template_part( 'part-post'); ?>   
    <?php endwhile; ?>
    

    If you simplify the code like above, does that help? Seems to be a lot of unnecessary php tags there.

  4. If You need to query a particular page post alone means you need to specify post id in the query and the post type name

    query_posts('p=postid&&post_type=posttypename'); 
    

    Or if You need to query all post under a post type use this

     if (is_page('research-2')) :
         $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
         query_posts('post_type=research');
        endif;
    
        if (is_page('issues')) :
         $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
         query_posts('post_type=studies'); 
        endif;
    
        while (have_posts()) : the_post();
         the_title();
        endwhile;