I want to make selecting a featured post is just by checking a checkbox in edit screen AND be able to retrieve these featured articles from only specific category ?

in short what I'm looking for :

  • set featured post

  • loop throw featured posts in a specific category (not all posts)

Any help? and thanks in advance :)


You can do this by following these steps:

  1. Add a custom meta box to your posts
  2. Create a function to save the meta data using the save_post action
  3. Add the 'meta_key' query argument to whatever query you are using.

Place this in your themes functions.php file:

function register_post_assets(){
    add_meta_box('featured-post', __('Featured Post'), 'add_featured_meta_box', 'post', 'advanced', 'high');
add_action('admin_init', 'register_post_assets', 1);

function add_featured_meta_box($post){
    $featured = get_post_meta($post->ID, '_featured-post', true);
    echo "<label for='_featured-post'>".__('Feature this post?', 'foobar')."</label>";
    echo "<input type='checkbox' name='_featured-post' id='featured-post' value='1' ".checked(1, $featured)." />";

function save_featured_meta($post_id){
    // Do validation here for post_type, nonces, autosave, etc...
    if (isset($_REQUEST['_featured-post']))
        update_post_meta(esc_attr($post_id, '_featured-post', esc_attr($_REQUEST['_featured-post']))); 
        // I like using _ before my custom fields, so they are only editable within my form rather than the normal custom fields UI
add_action('save_post', 'save_featured_meta');

Then in your template file use the following for the main loop:

    $args = array(
        'meta_key' => '_featured-post', // include underscore prefix in key name
        'meta_value' => 1
    // The number of posts displayed would be determined under Settings->Reading

    if(have_posts()): while(have_posts()): the_post();
        // Do your bidding here

    endwhile; else:


FOR EXAMPLE PURPOSES ONLY: For custom loops (If running multiple loops on one page), you would use this:

    $args = array(
        'posts_per_page' => 5,
        'meta_key' => '_featured-post',
        'meta_value' => 1

    $featured = new WP_Query($args);

    if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post();
    endwhile; else:

  • 1
    Why would you run a second (new) WP Query? Wouldn't it be enough to check the meta value?
    – kaiser
    Sep 18 '11 at 3:01
  • 2
    I never said to create a second loop. I was showing him for example purposes if he were to run multiple loops on one page. Codex says to use query_posts for the main loop and new WP_Query for a second custom loop. The misunderstanding didn't deserve a -1. :) Sep 18 '11 at 3:21
  • 1
    Reversed. Btw: Take a look at this answer. It should also be noted that the maybe best choice is to use filters for modifying the Query.
    – kaiser
    Sep 18 '11 at 5:08
  • 1
    I would assume that most implementation of "featured" posts would use a secondary loop, rather than the primary Loop - usually in the form of a list of featured posts, or a slider that displays the featured posts, etc. Oct 19 '11 at 16:43
  • 1
    Just a note about the code that goes on functions.php, I think it needs an extra ")" on line 15. Possible?
    – Peanuts
    Jul 4 '13 at 17:13

I tried to run this code and it helps me a lot for displaying my featured post on my homepage for my case study custom post type. Thanks a lot.

         <?php $args = array( 
                'post_type' => 'case_studies',
                'posts_per_page' => 1,
                'meta_key' => 'featured_post',
                'meta_value' => 1

            $featured = new WP_Query($args);

            if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post(); ?>
                <div class="c-image"><?php the_post_thumbnail('large'); ?></div>
                <div class="cstext">
                        <h2><?php the_title(); ?></h2>  
                        <span class="sub-title"> USAF SOCONS </span>
                        <?php the_content(); ?>
                        <a href="<?php echo get_permalink(); ?>" class="readmore">Learn More</a>

                    <a href="/case-studies" class="btn-primary">View all Case Studies</a>


                    else: 'No Content Added';
            endif; ?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.