Support » Themes and Templates » Exclude sticky posts at the top

  • Resolved breathe-out


    I want to make sticky posts behave like normal posts, my php skills are pretty bad so i hope someone out here could help me with that. From what I understand I have to edit the index.php file from the theme I’m using, if this is not correct please let me know.

    This is the unedited index.php file from my theme

     * The main template file.
     * This is the most generic template file in a WordPress theme
     * and one of the two required files for a theme (the other being style.css).
     * It is used to display a page when nothing more specific matches a query.
     * E.g., it puts together the home page when no home.php file exists.
     * Learn more:
     * @package Skylark
     * @since Skylark 1.6
    		$latest_sticky_id = array();
    get_header(); ?>
    		<div id="primary" class="site-content">
    			<div id="content" role="main">
    			<?php if ( have_posts() ) : ?>
    				<?php /* Start the Loop */ ?>
    				<?php while ( have_posts() ) : the_post(); ?>
    						/* Include the Post-Format-specific template for the content.
    						 * If you want to overload this in a child theme then include a file
    						 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
    						get_template_part( 'content', get_post_format() );
    				<?php endwhile; ?>
    				<?php skylark_content_nav( 'nav-below' ); ?>
    			<?php elseif ( current_user_can( 'edit_posts' ) ) : ?>
    				<?php get_template_part( 'no-results', 'index' ); ?>
    			<?php endif; ?>
    			</div><!-- #content -->
    		</div><!-- #primary .site-content -->
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    Someone overhere said he has found a solution, the problem is i have no clue how to implement it.

    The suggested code that should work according to the person who opened the a thread about this.

    $i = 1;
    if ( !empty($_GET['sort']) ) {
      $orderby = trim($_GET['sort']);
      $order = trim($_GET['order']);
      $key = trim($_GET['key']);
      query_posts($query_string . '&caller_get_posts=1&orderby=' . $orderby . '&meta_key=' . $key . '&order=' . $order);
    if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
      if ( $i % 2 == 0 ) { $alt = " class=\"alt\""; } else { $alt = " class=\"no\""; }
      echo "<div" . $alt;
      if ( is_sticky() ) { echo " id='sticky' "; } echo ">";
      <?php the_title(); ?>
    <?php endwhile; endif;

    Ive tried to copy the code shown above (solution code) over <?php if ( have_posts() ) : ?> without a succes -> error about unexpected endwhile. Then I removed one of the endwhiles in that example, after that i ended up with only showing the sticky post and not the others.

    can someone please help me, I’m very close now to finishing my blog.

    thanks in advance!

Viewing 9 replies - 1 through 9 (of 9 total)
  • Can you please post your site address – Then it would be easier to see what you are asking.

    I am not sure sticky posts are your problem. Also which theme are you using.

    My website: breathe-out
    theme: skylark

    To be able to show the posts in the slider you have to make them sticky + use a featured image. Also in the demo version the content of the slider are the top posts.

    thanks in advance



    Forum Moderator

    Have you tried asking on

    Sure have, you can see my question in their question section. But there is little to no activity. Have posted the question 2 days ago, but no response. Also they state that if you want code help, you probably have to pay them 😉



    Forum Moderator

    I’m sorry but as you are using what appears to be a commercially supported theme, you do need to seek support from the theme’s developers. It is not our place to deprive theme developers of any income that they may derive from support services.

    Hmm oke so I can’t get any help here.



    Forum Moderator

    even if you use a commercial supported theme, you can still get general support here;

    to ‘remove’ sticky posts from a loop, you need to edit the query parameters;

    totally untested, add this before the start of the loop, i.e. before this line <?php if ( have_posts() ) : ?>:

    <?php global $query_string; query_posts( $query_string . '&ignore_sticky_posts=1'); ?>

    awesome! it worked, what only a small line of code can do, thank you very much!

    Chip Bennett


    Theme Review Admin

    Follow-up: please do not use query_posts(). Filter the query via pre_get_posts instead. For example (this goes in functions.php):

    function breatheout_filter_pre_get_posts( $query ) {
        if ( $query->is_main_query ) {
            $query->set( 'ignore_sticky_posts', '1' );
    add_action( 'pre_get_posts', 'breatheout_filter_pre_get_posts' );

    Then, remove any references to query_posts() in your template files.

    Using this method will avoid stomping on the main query, and will preserve proper loop pagination.

Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘Exclude sticky posts at the top’ is closed to new replies.