Help needed: Exclude Category in Posts Index (home)

Post Reply
yukinaze
Jr. Bludit
Posts: 5
Joined: Sun Jan 11, 2026 12:49 pm
Has thanked: 2 times

I've searched the forums, but I can't seem to find what I need. I was hoping to exclude a single category from the list of displayed posts on the homepage. Ideally, also want to display posts of that excluded category in a different section, but not necessary, since I can link out to that category's own page.

Is there a way to do this in code?

What I've seen is only separating the recent posts from the rest of the list. But not by category.
User avatar
Edi
Site Admin
Posts: 3104
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Has thanked: 74 times
Been thanked: 111 times
Contact:

What do you mean with "the list of displayed posts on the homepage"? You can also give a link to your website.
aufbruch1900.ch, Plattform zu Kunst und Kultur um 1900
yukinaze
Jr. Bludit
Posts: 5
Joined: Sun Jan 11, 2026 12:49 pm
Has thanked: 2 times

Edi wrote: Sat Jan 17, 2026 9:32 pm What do you mean with "the list of displayed posts on the homepage"? You can also give a link to your website.
The home.php has all the displayed posts regardless of category, yes? I was hoping to exclude a certain category from this list. For example, I have the categories: general, design, asides, and travel. I want to exclude posts in the asides category from this display. Is there a way to do that?
User avatar
Edi
Site Admin
Posts: 3104
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Has thanked: 74 times
Been thanked: 111 times
Contact:

Which theme do you use? Do you mean the mainpage and the navigation in the sidebar (plugin Categories)?
aufbruch1900.ch, Plattform zu Kunst und Kultur um 1900
yukinaze
Jr. Bludit
Posts: 5
Joined: Sun Jan 11, 2026 12:49 pm
Has thanked: 2 times

Oh! Sorry, I am working on my custom theme for personal use.

My index.php calls home.php this way:

Code: Select all

<?php
				// Bludit content are pages
				// But if you order the content by date
				// These pages works as posts

				// $WHERE_AM_I variable detect where the user is browsing
				// If the user is watching a particular page/post the variable takes the value "page"
				// If the user is watching the frontpage the variable takes the value "home"
				if ($WHERE_AM_I == 'page') {
				    if ($page->template() == 'custom') {
					include(THEME_DIR_PHP.'custom.php');
				    }
				    elseif ($page->template() == 'static') {
					    include(THEME_DIR_PHP.'page-static.php');
				    }
				    elseif ($page->template() == 'micro') {
					    include(THEME_DIR_PHP.'page-micro.php');
				    }
				    elseif ($page->template() == 'now') {
					    include(THEME_DIR_PHP.'page-now.php');
				    }
				    else {
					    include(THEME_DIR_PHP.'page.php');
				    }
			        } elseif ( $WHERE_AM_I === 'category' ) {
				    include( THEME_DIR_PHP.'category.php' );
			        } elseif ( $WHERE_AM_I === 'tag' ) {
				    include( THEME_DIR_PHP.'tag.php' );
			    } else {
				    include(THEME_DIR_PHP.'home.php');
			    }
			?>
And so my home.php has this:

Code: Select all

<?php 
    foreach ($content as $page) : ?>
    <?php $category = getCategory($categoryKey); ?>
    <li class="list-group-item d-flex justify-content-between align-items-center px-4 py-3<?php if ( $page->tags( true ) ): ?><?php foreach( $page->tags( true ) as $tagKey=>$tagSlug ) :?> <?php echo $tagSlug ?><?php endforeach; ?><?php endif; ?><?php if ($page->sticky()) : ?> sticky<?php endif ?>">
    <!-- Post -->
        <div class="postItem me-auto">
            <?php if ($page->sticky()) : ?><i class="fa-solid fa-thumbtack text-muted"></i><?php endif ?>
            <a class="titleLink" href="<?php echo $page->permalink(); ?>"><h4 class="title"><?php echo $page->title(); ?>  <?php if ($page->coverImage()) : ?><?php endif ?></h2></a>
            <div class="blurb"><p><?php echo $page->custom('microblogging'); ?></p></div>
            <p class="mb-0 readingTime"><small class="text-body-secondary"><?php echo $L->get('Reading time') . ': ' . $page->readingTime(); ?></small></p>
        </div>
            <p class="postDate mb-0 text-end"><a href="<?php echo $page->permalink(); ?>"><?php echo $page->date('j M Y'); ?></a></p>
    </li>
<?php endforeach ?>
</ul>
This list displays all my latest posts on the front page, from any category. I was hoping to exclude posts one specific category from this list.
User avatar
Edi
Site Admin
Posts: 3104
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Has thanked: 74 times
Been thanked: 111 times
Contact:

You can exclude a category with an if condition.

For example, if you want exclude the category "Exclude", you can use the following:

Code: Select all

<?php foreach ($content as $page) : ?>
	<?php if ($page->category() !== 'Excluded') : ?>
		...
	<?php endif; ?>
<?php endforeach; ?>
aufbruch1900.ch, Plattform zu Kunst und Kultur um 1900
yukinaze
Jr. Bludit
Posts: 5
Joined: Sun Jan 11, 2026 12:49 pm
Has thanked: 2 times

Thank you! This works for me.

Is it possible to display that excluded category as a separate list in a different section of the homepage where the above script is also without conflict? All good if not.
User avatar
Edi
Site Admin
Posts: 3104
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Has thanked: 74 times
Been thanked: 111 times
Contact:

You can use the inverse condition (=== instead of !==):

Code: Select all

<?php if ($page->category() === 'Excluded') : ?>
aufbruch1900.ch, Plattform zu Kunst und Kultur um 1900
yukinaze
Jr. Bludit
Posts: 5
Joined: Sun Jan 11, 2026 12:49 pm
Has thanked: 2 times

This works! Thank you
Post Reply