¿Cómo establecer posts destacados usando un checkbox en la pantalla de edición?
Quiero que seleccionar un post destacado sea tan simple como marcar un checkbox en la pantalla de edición Y poder recuperar estos artículos destacados solo de una categoría específica.
En resumen, lo que busco:
Establecer post destacado
Recorrer los posts destacados en una categoría específica (no todos los posts)
¿Alguna ayuda? Y gracias de antemano :)

Puedes hacer esto siguiendo estos pasos:
- Añade un meta box personalizado a tus entradas
- Crea una función para guardar los metadatos usando la acción save_post
- Añade el argumento de consulta 'meta_key' a cualquier consulta que estés utilizando.
Coloca esto en el archivo functions.php de tu tema:
function register_post_assets(){
add_meta_box('featured-post', __('Entrada Destacada'), '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'>".__('¿Destacar esta entrada?', 'foobar')."</label>";
echo "<input type='checkbox' name='_featured-post' id='featured-post' value='1' ".checked(1, $featured)." />";
}
function save_featured_meta($post_id){
// Realiza validaciones aquí para post_type, nonces, autoguardado, etc...
if (isset($_REQUEST['_featured-post']))
update_post_meta(esc_attr($post_id, '_featured-post', esc_attr($_REQUEST['_featured-post'])));
// Me gusta usar _ antes de mis campos personalizados, para que solo sean editables dentro de mi formulario y no en la UI normal de campos personalizados
}
add_action('save_post', 'save_featured_meta');
Luego, en tu archivo de plantilla usa lo siguiente para el loop principal:
$args = array(
'meta_key' => '_featured-post', // incluye el prefijo de guión bajo en el nombre de la clave
'meta_value' => 1
);
// El número de entradas mostradas estaría determinado en Ajustes->Lectura
query_posts($args);
if(have_posts()): while(have_posts()): the_post();
// Haz lo que necesites aquí
endwhile; else:
endif;
SÓLO A MODO DE EJEMPLO: Para loops personalizados (si ejecutas múltiples loops en una página), usarías esto:
$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();
the_title();
the_content();
endwhile; else:
endif;

¿Por qué ejecutarías una segunda (nueva) WP Query? ¿No sería suficiente verificar el valor meta?

Nunca dije que crearas un segundo loop. Le estaba mostrando con fines de ejemplo si quisiera ejecutar múltiples loops en una página. El Codex indica usar query_posts para el loop principal y new WP_Query para un loop personalizado secundario. El malentendido no merecía un -1. :)

Al revés. Por cierto: Mira esta respuesta. También cabe destacar que quizás la mejor opción es usar filtros para modificar la Query.

Supongo que la mayoría de las implementaciones de publicaciones "destacadas" usarían un bucle secundario, en lugar del bucle principal, generalmente en forma de una lista de publicaciones destacadas, o un slider que muestre las publicaciones destacadas, etc.

Solo una nota sobre el código que va en functions.php, creo que necesita un ")" adicional en la línea 15. ¿Es posible?

Chicos, esto no está actualizando el campo personalizado para mí... ¿qué puede ser?

@BrianFegter, sé que esta respuesta es muy antigua pero ahora no funciona. Quiero decir, obtengo la opción "¿Destacar esta publicación?" con una casilla de verificación en la página de la publicación (al final de la publicación), la seleccioné y actualicé lo cual funcionó perfectamente, pero ahora al mostrar en mi página las publicaciones seleccionadas, eso no está funcionando.

Intenté ejecutar este código y me ayudó mucho para mostrar mi publicación destacada en la página de inicio para mi tipo de publicación personalizada de estudios de caso. Muchas gracias.
<?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">
<article>
<h2><?php the_title(); ?></h2>
<span class="sub-title"> USAF SOCONS </span>
<?php the_content(); ?>
<a href="<?php echo get_permalink(); ?>" class="readmore">Conoce más</a>
</article>
<a href="/case-studies" class="btn-primary">Ver todos los estudios de caso</a>
</div>
<?php
endwhile;
else: 'No hay contenido agregado';
endif; ?>
</div>
</div>
