The Broken “Sticky Post” Feature: Why Your Pinned Post Unpins Itself

You wrote an important announcement. A welcome message. A “please read this first” note. You pinned it to the top of your blog. It stayed there for weeks.

Then one day — it vanished. A newer post took its place. Or worse, nothing is pinned anymore.

The WordPress Sticky Post feature seems simple. But when it breaks, it’s frustrating and confusing. This guide explains why sticky posts unpin themselves and how to fix it.

Table of Contents

  1. What Are Sticky Posts?
  2. Why Sticky Posts Fail (The 5 Most Common Causes)
  3. How to Fix Broken Sticky Posts
  4. Preventing Sticky Post Problems

1. What Are Sticky Posts?

Sticky posts (also called “pinned posts”) are WordPress posts that stay at the top of your blog page, regardless of publish date. They appear before newer posts.

How to set a sticky post:

  1. Edit any post
  2. In the Summary sidebar, find Visibility
  3. Click Public → check Stick to the top of the blog
  4. Update the post

Where they appear:

  • Your main blog page (/blog)
  • Any archive page using pre_get_posts with 'ignore_sticky_posts' => false
  • Category and tag archives (if your theme supports it)

What they don’t affect:

  • Homepages using static front pages
  • Custom post types
  • RSS feeds (by default)

2. Why Sticky Posts Fail (The 5 Most Common Causes)

Cause #1: Another Post Overrides It

WordPress allows multiple sticky posts. If Post A and Post B are both sticky, Post B (newer) appears first — but Post A should still be pinned below it.

The real problem: A newer post was accidentally set as sticky, pushing your original pinned post down (sometimes below the fold, where you don’t see it).

How to check:

  1. Go to Posts → All Posts
  2. Look for the Sticky column (may need to enable via Screen Options)
  3. See which posts have the sticky status

Fix: Remove sticky status from any post that shouldn’t be pinned.

Cause #2: Theme Doesn’t Support Sticky Posts

Not all themes respect sticky posts. Some blog themes ignore them entirely. Others use custom loops that bypass the sticky logic.

How to test:

  1. Temporarily switch to a default theme (Twenty Twenty-Four, Twenty Twenty-Three)
  2. Check your blog page
  3. If sticky posts work with the default theme, your theme is the problem

Fix: Contact your theme developer or modify your theme’s home.php or index.php to include:

php

<?php if ( have_posts() ) : ?>
    <?php while ( have_posts() ) : the_post(); ?>
        <?php if ( is_sticky() ) : ?>
            // Highlight or style sticky posts differently
        <?php endif; ?>
    <?php endwhile; ?>
<?php endif; ?>

Cause #3: Plugin Conflict

Some plugins interfere with sticky posts:

  • Custom post type plugins — may alter the main query
  • SEO plugins — some modify archive behavior
  • Cache plugins — can serve stale versions of your blog page
  • Related posts plugins — sometimes hijack the loop

How to test:

  1. Deactivate all plugins
  2. Check sticky posts
  3. Reactivate plugins one by one until the problem returns

Fix: Replace the conflicting plugin or contact its support.

Cause #4: Custom Query Ignores Sticky Posts

If you (or your theme) use a custom WP_Query on the blog page, sticky posts are ignored by default unless you explicitly tell WordPress to include them.

Problem code:

php

$custom_query = new WP_Query(array(
    'posts_per_page' => 10
    // 'ignore_sticky_posts' defaults to 1 (ignore)
));

Fix: Add 'ignore_sticky_posts' => 0 to your query:

php

$custom_query = new WP_Query(array(
    'posts_per_page' => 10,
    'ignore_sticky_posts' => 0
));

Then display sticky posts separately:

php

<?php
$sticky = get_option('sticky_posts');
if (!empty($sticky)) {
    $sticky_query = new WP_Query(array(
        'post__in' => $sticky,
        'ignore_sticky_posts' => 1
    ));
    // Display sticky posts here
}
?>

Cause #5: Database Corruption

Rare but possible. The sticky_posts option in your wp_options table may be corrupted or empty.

How to check via phpMyAdmin:

  1. Open phpMyAdmin
  2. Find your wp_options table
  3. Search for option_name = 'sticky_posts'
  4. The option_value should look like a:1:{i:0;s:3:"123";} (serialized array of post IDs)

Fix: If corrupted, manually set sticky posts:

  1. Note the ID of the post you want to sticky
  2. In phpMyAdmin, edit the sticky_posts row
  3. Set option_value to a:1:{i:0;s:3:"[POST_ID]";} (replace [POST_ID] with your actual post ID)
  4. Click Go

Alternative: Use WP CLI:

bash

wp option patch insert sticky_posts 123

3. How to Fix Broken Sticky Posts (Step-by-Step)

Follow this checklist in order:

Step 1: Check if sticky posts are still set

  • Go to Posts → All Posts
  • Enable Sticky column via Screen Options
  • Verify your intended post still has the sticky status

Step 2: Check for multiple sticky posts

  • Look for any other post with the sticky icon
  • Remove sticky status from accidental posts

Step 3: Test with a default theme

  • Temporarily switch to Twenty Twenty-Four
  • If sticky posts work, your theme is the problem

Step 4: Test with all plugins disabled

  • Deactivate all plugins
  • If sticky posts work, reactivate one by one to find the culprit

Step 5: Clear all caches

  • Clear your caching plugin
  • Clear your CDN (Cloudflare, etc.)
  • Clear your browser cache
  • Clear your hosting cache (if applicable)

Step 6: Repair the database

  • Go to Tools → Site Health → Info → Database
  • Look for corrupted tables
  • Use phpMyAdmin’s Repair Table function on wp_options

Step 7: Manually set sticky posts via code
Add to your theme’s functions.php temporarily:

php

function force_sticky_posts() {
    update_option('sticky_posts', array(123)); // Replace 123 with your post ID
}
add_action('init', 'force_sticky_posts');

After confirming it works, remove the code.

4. Preventing Sticky Post Problems

Document your sticky posts

  • Keep a list of which posts are intentionally sticky
  • Regularly audit your sticky posts (monthly)

Avoid multiple sticky posts

  • WordPress handles them, but themes often don’t display them well
  • Stick to one pinned post when possible

Test theme changes on staging

  • Before updating your theme, check that sticky posts still work
  • Some theme updates break custom loop logic

Use a sticky post plugin
For advanced control, consider:

  • Sticky Menu (or Anything!) — for custom sticky behavior
  • Category Sticky Post — stick posts by category
  • Simple Sticky Post — adds sticky options to custom post types

Monitor your blog page after each WordPress update

  • Major WordPress releases sometimes change query behavior
  • Check sticky posts within 24 hours of updating

Final Thoughts

The sticky post feature is simple but fragile. Most “broken” sticky posts aren’t actually broken — they’re just overridden by another sticky post or ignored by a theme that doesn’t support them.

Remember:

  • WordPress allows multiple sticky posts (but themes may not handle them well)
  • Custom queries ignore sticky posts unless you tell them not to
  • Default themes always work — use them to test
  • Clear caches before assuming something is broken

When your pinned post unpins itself, start with the simplest check: did someone (or something) set another post as sticky? Nine times out of ten, that’s the answer.

Was this post helpful?
Buy us a coffee!
Tags: