How set featured posts using checkbox in post edit screen?

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 :

Any help? and thanks in advance 🙂

Solutions Collecting From Web of "How set featured posts using checkbox in post edit screen?"

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: