I have defined several page templates on my site When I set my pages to use one of these page templates, wordpress seems to stop treating it as a page:

  • It is not accepted in the is_page() conditional tag
  • The body class "page" is not present (instead its showing "home").

Only when I use the default page template for my pages they are truly treated as a page by wordpress.

Anyone got a clue what´s going on?




if ( have_posts() ) : while ( have_posts() ) : the_post();
    $start = get_post_meta($post->ID, '5Start', true);
    $stop = get_post_meta($post->ID, '6Slutt', true);

    if(is_active($start, $stop)) { 
        $offer = print_offer($post->ID, $start, $stop);
        echo $offer;

  • Most likely you are messing up main Loop, typical reason is wrong usage of query_posts(). Please add code from template that has this issue.
    – Rarst
    Oct 8 '10 at 12:59
  • added some code
    – Espen Arnoy
    Oct 8 '10 at 13:08
  • I think I figured it out. I was messing up with query_posts()
    – Espen Arnoy
    Oct 8 '10 at 13:39

Thought so...

You are using query_posts() and this nukes native page's loop and replaces all relevant data with your query. Since your query isn't for page - your page is no longer treated as such.

Always use get_posts() or new WP_Query object for secondary loops.

See When should you use WP_Query vs query_posts() vs get_posts()?

  • can´t wp_reset_query() do the job?
    – Espen Arnoy
    Oct 8 '10 at 13:46
  • Not sure, but doesn't matter. It is not meant and should not be used for secondary loops (ever). It makes sense to use right function from the start rather than trying to fix inherently broken approach.
    – Rarst
    Oct 8 '10 at 13:53
  • What do you mean by secondary loops? Any loops outside index.php?
    – Espen Arnoy
    Oct 8 '10 at 14:01
  • Any Loop other than what WordPress creates internally for every page (based on requested URL). Even if you are not querying or displaying anything at all there is still main Loop working in background. The purpose of query_posts() is to change parameters of that Loop.
    – Rarst
    Oct 8 '10 at 14:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy