I'm a little bit confused with the use of the Loop. This is my first theme and i just use index.php currently to display all my pages. It works fine for pages but have_posts return false when i try to display a single post. Here is the code of the index.php:
<?php
get_header();
?>
<div class="left">
<?php
if ( have_posts() ) :
// Start the loop.
while ( have_posts() ) : the_post();
//echo for debugging
echo 'index<br>';
echo get_the_ID().'<br>';
//function to display page
field_page_builder_front_display(get_the_ID(),get_post_type(get_the_ID()));
endwhile;
else :
?>
Sorry, this page does not exist
<?php
endif;
?>
</div>
<?php
//display custom sidebar
get_side_bar();
get_footer();
?>
This index.php return "Sorry, this does not exist" for all my single post (articles or custom post). I thought it was because the loop is only for displaying multiple posts but the file single.php of the theme twentfifteen use the loop too, so i don't understand the problem.
Thank in advance for all your help !
I'm a little bit confused with the use of the Loop. This is my first theme and i just use index.php currently to display all my pages. It works fine for pages but have_posts return false when i try to display a single post. Here is the code of the index.php:
<?php
get_header();
?>
<div class="left">
<?php
if ( have_posts() ) :
// Start the loop.
while ( have_posts() ) : the_post();
//echo for debugging
echo 'index<br>';
echo get_the_ID().'<br>';
//function to display page
field_page_builder_front_display(get_the_ID(),get_post_type(get_the_ID()));
endwhile;
else :
?>
Sorry, this page does not exist
<?php
endif;
?>
</div>
<?php
//display custom sidebar
get_side_bar();
get_footer();
?>
This index.php return "Sorry, this does not exist" for all my single post (articles or custom post). I thought it was because the loop is only for displaying multiple posts but the file single.php of the theme twentfifteen use the loop too, so i don't understand the problem.
Thank in advance for all your help !
Late answer but, one possible scenario this could be happening is if you register two custom post types with the same permalink slug.
You can debug this by doing a var_dump
of the global variable $wp_query
.
global $wp_query;
var_dump($wp_query);
Check to see if the post_type
in the query matches the post type of the page you are currently visiting.
If you find that it does not match then your next step is to check out the arguments where both the post types are being registered. Take a look at the rewrite
specifically. If the slug
is set to the same value, you will have a conflict between the two custom post types.
Bad
// post type (a)
$args_a = array(
'rewrite' => array(
'slug' => 'hello'
),
);
// post type (b)
$args_b = array(
'rewrite' => array(
'slug' => 'hello'
),
);
Good
// post type (a)
$args_a = array(
'rewrite' => array(
'slug' => 'hello'
),
);
// post type (b)
$args_b = array(
'rewrite' => array(
'slug' => 'world' // <-- this is now different.
),
);
That alone may not fix your issue because you will need to flush the permalinks. To do that, you can just go to the Admin Dashboard > Settings > Permalinks page and click on the save changes
button. That will flush the permalinks so they are now updated to be hello
and world
respectively for your custom post types.
You don't have any posts query running probably.
Try this (added query_posts();
)
<?php
get_header();
?>
<div class="left">
<?php
query_posts( $args );
if ( have_posts() ) :
// Start the loop.
while ( have_posts() ) : the_post();
//echo for debugging
echo 'index<br>';
echo get_the_ID().'<br>';
//function to display page
field_page_builder_front_display(get_the_ID(),get_post_type(get_the_ID()));
endwhile;
else :
?>
Sorry, this page does not exist
<?php
endif;
?>
</div>
<?php
//display custom sidebar
get_side_bar();
get_footer();
?>