7

I want to mark some posts to include them in a featured content slider. For that purpose, I want to include a check box on the new post page, so that if the checkbox is selected the post is marked as featured. Then I can display all marked posts in the slider. How this can be done? Thanks.

2
  • This is usually done either placing the featured posts in featured category or tagging them with featured tag. It depends on your theme but 99% of the time its either of the tagging or featured category selection. Commented May 25, 2011 at 8:53
  • sticky is also sometimes used for this
    – anu
    Commented May 25, 2011 at 10:18

1 Answer 1

9

You can create your own meta box with a checkbox and only select posts that where checked:

Add metabox code

/* Define the custom box */
add_action( 'add_meta_boxes', 'my_slider_add_custom_box' );

/* Do something with the data entered */
add_action( 'save_post', 'my_slider_save_postdata' );

/* Adds a box to the main column on the Post and Page edit screens */
function my_slider_add_custom_box() {
    add_meta_box( 
        'my_slider_sectionid',
        __( 'my slider', 'my_slider_textdomain' ),
        'my_slider_inner_custom_box',
        'post' 
    );
}

/* Prints the box content */
function my_slider_inner_custom_box() {
    global $post;
    // Use nonce for verification
    wp_nonce_field( plugin_basename( __FILE__ ), 'my_slider_noncename' );
    $saved = get_post_meta($post->ID,'my_slider_field',true);
    // The actual fields for data entry
    echo '<label for="my_slider_field">';
    _e("Check the box if you want this post to show in the slider", 'myplugin_textdomain' );
    echo '</label> ';
    echo '<input type="checkbox" id="my_slider_field" name="my_slider_field" value="yes"';
    echo  ($saved) ? 'checked': '';
    echo '/>';
}

/* When the post is saved, saves our custom data */
function my_slider_save_postdata( $post_id ) {
      // verify if this is an auto save routine. 
      // If it is our form has not been submitted, so we dont want to do anything
      if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
          return;

      // verify this came from the our screen and with proper authorization,
      // because save_post can be triggered at other times

      if ( !wp_verify_nonce( $_POST['my_slider_noncename'], plugin_basename( __FILE__ ) ) )
          return;

      // OK, we're authenticated: we need to find and save the data
        $old = get_post_meta($post_id,'my_slider_field',true);
      if (isset($_POST['my_slider_field']) && $_POST['my_slider_field'] == "yes"){
            update_post_meta($post_id,'my_slider_field',true);
      }else{
        if (!empty($old)){
            delete_post_meta($post_id,'my_slider_field');
        }
      }
}

Query posts that were checked

$args = array(
    'posts_per_page' => -1
    'meta_query' => array(
        array(
            'key' => 'my_slider_field',
            'value' => true
        )
    );
$slider_query = new WP_Query($args);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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