Come impostare post in evidenza usando una checkbox nella schermata di modifica?

17 set 2011, 22:42:46
Visualizzazioni: 15K
Voti: 7

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 :)

0
Tutte le risposte alla domanda 2
7
10

Puoi farlo seguendo questi passaggi:

  1. Aggiungi un meta box personalizzato ai tuoi articoli
  2. Crea una funzione per salvare i meta dati usando l'azione save_post
  3. 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;
18 set 2011 04:58:35
Commenti

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

kaiser kaiser
18 set 2011 06:01:32

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. :)

Brian Fegter Brian Fegter
18 set 2011 06:21:37

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

kaiser kaiser
18 set 2011 08:08:09

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.

Chip Bennett Chip Bennett
19 ott 2011 19:43:20

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

Peanuts Peanuts
4 lug 2013 20:13:53

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

Peanuts Peanuts
4 lug 2013 21:05:14

@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.

Naren Verma Naren Verma
14 nov 2019 11:00:10
Mostra i restanti 2 commenti
0

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>  

3 apr 2019 05:14:47