web-dev-qa-db-fra.com

Comment définir les articles en vedette en utilisant la case à cocher dans l'écran d'édition?

Je veux faire en sélectionnant un article en vedette est simplement en cochant une case dans l'écran d'édition ET être capable de récupérer ces articles en vedette à partir de catégorie spécifique?

bref ce que je cherche:

  • mettre en vedette post

  • lancer en boucle les articles en vedette dans une catégorie spécifique (pas tous les articles)

De l'aide? et merci d'avance :)

7
Bialy

Vous pouvez le faire en suivant ces étapes:

  1. Ajouter une méta-boîte personnalisée à vos messages
  2. Créez une fonction pour enregistrer les métadonnées à l'aide de l'action save_post
  3. Ajoutez l'argument de requête 'meta_key' à la requête que vous utilisez.

Placez ceci dans le fichier functions.php de votre themes:

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');

Dans votre fichier de modèle, utilisez ensuite les éléments suivants pour la boucle principale:

    $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
    query_posts($args);

    if(have_posts()): while(have_posts()): the_post();
        // Do your bidding here

    endwhile; else:

    endif;

À titre d'exemple uniquement: pour les boucles personnalisées (si vous exécutez plusieurs boucles sur une page), vous utiliserez:

    $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;
9
Brian Fegter

J'ai essayé d'exécuter ce code et cela m'aide beaucoup à afficher mon article en vedette sur ma page d'accueil pour mon type d'article personnalisé. Merci beaucoup.

         <?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">Learn More</a>
                    </article> 

                    <a href="/case-studies" class="btn-primary">View all Case Studies</a>

                </div> 

            <?php 
                endwhile; 
                    else: 'No Content Added';
            endif; ?>
    </div>
</div>  
0
user164332