Come impostare post in evidenza usando una checkbox nella schermata di modifica?
Voglio poter selezionare un post in evidenza semplicemente spuntando una checkbox nella schermata di modifica E poter recuperare questi articoli in evidenza solo da una categoria specifica?
In breve quello che cerco:
impostare post in evidenza
ciclo attraverso i post in evidenza di una categoria specifica (non tutti i post)
Qualche aiuto? Grazie in anticipo :)

Puoi farlo seguendo questi passaggi:
- Aggiungi un meta box personalizzato ai tuoi articoli
- Crea una funzione per salvare i meta dati usando l'azione save_post
- Aggiungi l'argomento di query 'meta_key' a qualsiasi query tu stia utilizzando.
Inserisci questo nel file functions.php del tuo tema:
function register_post_assets(){
add_meta_box('featured-post', __('Articolo in evidenza'), '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'>".__('Metti in evidenza questo articolo?', 'foobar')."</label>";
echo "<input type='checkbox' name='_featured-post' id='featured-post' value='1' ".checked(1, $featured)." />";
}
function save_featured_meta($post_id){
// Effettua qui la validazione per post_type, nonces, autosave, ecc...
if (isset($_REQUEST['_featured-post']))
update_post_meta(esc_attr($post_id, '_featured-post', esc_attr($_REQUEST['_featured-post'])));
// Utilizzo _ prima dei miei campi personalizzati, così sono modificabili solo nel mio form e non nell'interfaccia standard dei campi personalizzati
}
add_action('save_post', 'save_featured_meta');
Poi nel tuo file template utilizza il seguente codice per il loop principale:
$args = array(
'meta_key' => '_featured-post', // includi il prefisso underscore nel nome della chiave
'meta_value' => 1
);
// Il numero di articoli visualizzati sarebbe determinato in Impostazioni->Lettura
query_posts($args);
if(have_posts()): while(have_posts()): the_post();
// Esegui qui le tue operazioni
endwhile; else:
endif;
SOLO A SCOPO ESEMPLIFICATIVO: Per loop personalizzati (se esegui più loop su una pagina), useresti questo:
$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;

Perché dovresti eseguire una seconda (nuova) WP Query? Non sarebbe sufficiente controllare il valore meta?

Non ho mai detto di creare un secondo loop. Gli stavo mostrando a scopo di esempio cosa fare se volesse eseguire più loop su una pagina. Il Codex dice di usare query_posts per il loop principale e new WP_Query per un secondo loop personalizzato. L'incomprensione non meritava un -1. :)

Invertito. A proposito: dai un'occhiata a questa risposta. Va anche notato che la scelta forse migliore è usare i filtri per modificare la Query.

Presumo che la maggior parte delle implementazioni di post "in evidenza" utilizzerebbero un loop secondario, piuttosto che il Loop primario - solitamente sotto forma di un elenco di post in evidenza, o uno slider che mostra i post in evidenza, ecc.

Nota riguardo al codice che va in functions.php, penso che manchi una parentesi ")" aggiuntiva alla riga 15. Possibile?

Ragazzi, questo non sta aggiornando il custom field per me... cosa potrebbe essere?

@BrianFegter, so che questa risposta è molto vecchia ma ora non funziona più. Intendo che ottengo la voce "Feature this post?" con la casella di controllo nella pagina del post (in fondo al post), l'ho selezionata e aggiornata e questo funziona perfettamente, ma ora quando cerco di visualizzare nella mia pagina i post selezionati, non funziona.

Ho provato a eseguire questo codice e mi è stato molto utile per visualizzare il mio post in evidenza nella homepage per il mio tipo di post personalizzato "case study". Grazie mille.
<?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">Scopri di più</a>
</article>
<a href="/case-studies" class="btn-primary">Vedi tutti i Case Studies</a>
</div>
<?php
endwhile;
else: 'Nessun contenuto aggiunto';
endif; ?>
</div>
</div>
