• For every post in the category (Special) I want to use a custom template. For the rest of the posts, I want to use the theme defaults.

    How do we go about this, assuming it’s possible.

Viewing 5 replies - 1 through 5 (of 5 total)
  • Hi! @oguruma

    This might be what you are looking for

    https://codex.www.ads-software.com/Category_Templates

    Create a template in your theme’s folder category-special.php with your desired template.

    Hope this helps,
    Kind regards.

    Thread Starter oguruma

    (@oguruma)

    Not quite @vladytimy .

    I need to set a custom SINGLE.php, not the category.php.

    So, I need logic in my single.php that says

    If the category is “Special-Cat” then do “some stuff”

    Else do “normal post stuff”

    Oh, sorry, my bad!
    How about this approach.

    You make a copy of single.php and name it default-single.php and also make a template named special-single.php.

    Then, you replace everything in single.php with:

    
    if(in_category('special')) include('special-single.php);
    else include('default-special.php');
    

    Or you make an if… else statement inside the single.php template.

    There might be more elegant solutions than this, but this I’ve actually used before.

    Actually this might even be even more elegant for your single.php:

    <?php if(in_category('special')): ?>
    
    Your special template here
    
    <?php else: ?>
    
    Default template here
    
    <?php endif ?>
    Moderator bcworkz

    (@bcworkz)

    Vlad’s suggestions are perfectly valid. There are often multiple ways to accomplish something. If you name a template file in a particular way, it will only be used for a specific request. Please review
    https://developer.www.ads-software.com/themes/basics/template-hierarchy/

    For example, if you named a template single-post-foo.php, it will only be used for the post whose slug is “foo”.

Viewing 5 replies - 1 through 5 (of 5 total)
  • The topic ‘Different post template based on category?’ is closed to new replies.