I have set up a few categories and want to display specific ones based on is_page()
.
Inside page.php
, I’ve created an if..else
statement that checks the page name and prints out the specific category. My problem at the moment is that instead of just the_title
being printed out the whole post is being printed.
Where am I going wrong with this?
<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'content', 'page' ); ?>
<?php if ( is_page( 'Greywater Recycling' ) ) { ?>
<div class="col">
<?php query_posts( 'category_name=Greywater Recycling&posts_per_page=5'); if (have_posts()) : while (have_posts()) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; endif; ?>
</div>
<?php } else if ( is_page( 'Stormwater Management' ) ) { ?>
<div class="col">
<?php query_posts( 'category_name=Stormwater Management&posts_per_page=5'); if (have_posts()) : while (have_posts()) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; endif; ?>
</div>
<?php } else if ( is_page( 'Rainwater Harvesting' ) ) { ?>
<div class="col">
<?php query_posts( 'category_name=Rainwater Harvesting&posts_per_page=5'); if (have_posts()) : while (have_posts()) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; endif; ?>
</div>
<?php } ?>
<?php endwhile; // end of the loop. ?>
Many problems with your code. For one,
is_page
does not work inside the loop.Second, don’t mess with
query_posts
: When should you use WP_Query vs query_posts() vs get_posts()?. Really, forget about it for secondary loops.Your code can be simplified to the following. In
functions.php
, we drop one function to get the Category ID by its Name. And another to do a secondary loop using the ID. And then, inpage.php
a simple call to those functions.Documentation: Class_Reference/WP_Query.
page.php
Notice that you don’t need to open PHP tags at each line, that makes the code dreadly difficult to read.
Use it only to swap between PHP and HTML
functions.php
Always prefix your function names with something distinctive to avoid conflicts that may take the site down.
Although I’ve answered within the proposed scope, I think there are better solutions to this, like:
a shortcode, just adapt the functions.
using Advanced Custom Fields to show a meta box where you can select a very specific category (don’t relying in page and category names) and use only the
WP_Query
function to print it out in the template.i think it’s better to get the category by the slug name.
i’ve tried your solution, it works fine but in the case of one of my category has a name with special html characters like apostrophes or quotes it doesn’t.
here is the piece of code edited from your solution :
in your functions.php
in your page.php