0Wordpress LogoMystique 3 Theme: Full-post and Excerpts

I’ve been try­ing to fig­ure out how to dis­play full posts on the home page, and excerpts on all archives for about 3 days.  This is nice because it means a decent amount of each post is shown on the front page, whilst archive pages con­tain a much more con­cise sum­mary of each post.  This is bet­ter both for humans, and also for SEO — my archive pages now don’t have duplic­ate con­tent from my home page!

I’ve finally pro­duced a solu­tion.  It’s not espe­cially eleg­ant, but I’ve been at the very lim­it of my PHP know­ledge just to achieve this meth­od.  This applies spe­cific­ally to the Mys­tique 3 theme, oth­er themes are likely to vary, although some of this inform­a­tion may or may not prove rel­ev­ant.  If you are try­ing or suc­ceed in doing the same to a dif­fer­ent theme do drop a com­ment in.

How it currently works

Mys­tique has options which allow the admin to choose wheth­er to dis­play excerpts or full posts.  This option is stored as $post_content_mode inside the $options array.

The file archive.php dis­plays the archive and dis­plays each post in a loop via teaser.php

teaser.php has the line

[php]<?php (is_sticky() && is_home()) ? the_content() : $app->post->content(); ?>[/php]

This line gen­er­ates the con­tent via a call to the func­tion get­Con­tent in the file AtomObjectPost.php.  If this line is com­men­ted the post con­tents dis­ap­pear from archive pages.

The get­Con­tent func­tion loads $options and as a res­ults either calls the_content() or the_excerpt() which are word­press built-in functions.

The solution

I’ve man­aged to achieve what I wish by modi­fy­ing teaser.php — but its a bit of a botch job I think.  I just replaced

[php]<?php (is_sticky() && is_home()) ? the_content() : $app->post->content(); ?>[/php]

With

[php]<?php if(is_home()): ?>
<?php (is_sticky() && is_home()) ? the_content() : $app->post->content(); ?>
<?php else: ?>
<?php (is_sticky() && is_home()) ? the_excerpt() : $app->post->content(‘e’); ?>
<?php endif; ?>[/php]

A better solution?

I would rather imple­ment this solu­tion via an addi­tion to functions.php but I have no idea how to do so.  My PHP know­ledge just isn’t good enough.

Leave a Reply