web-dev-qa-db-fra.com

Comment afficher uniquement les annonces en vedette/collantes sur la page d'accueil

Je souhaite afficher sur ma page d'accueil de ma première page uniquement les annonces en vedette, quel que soit leur âge.

Ceci est mon code de page d'accueil:

   <?php get_header(); ?>

<?php
if(get_option('aven_home') == "listing") { ?>   
<?php include (TEMPLATEPATH . '/lib/listhome.php'); ?>
<?php } else { ?>
<div id="content">

<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('paged='.$paged);
?>
<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>   

<div class="post" id="post-<?php the_ID(); ?>">

<div class="title">
    <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></h2>
</div>
<div class="postmeta">
    <span class="author">Posted by <?php the_author(); ?> </span> <span class="clock">  <?php the_time('M - j - Y'); ?></span> <span class="comm"><?php comments_popup_link('0 Comment', '1 Comment', '% Comments'); ?></span>
</div>

<div class="entry">

<?php
if ( has_post_thumbnail() ) { ?>
    <a href="<?php the_permalink() ?>"><img class="postimg" src="<?php bloginfo('stylesheet_directory'); ?>/timthumb.php?src=<?php get_image_url(); ?>&amp;h=150&amp;w=200&amp;zc=1" alt=""/></a>
<?php } else { ?>
    <a href="<?php the_permalink() ?>"><img class="postimg" src="<?php bloginfo('template_directory'); ?>/images/dummy.png" alt="" /></a>
<?php } ?>
<?php wpe_excerpt('wpe_excerptlength_index', ''); ?>
<div class="clear"></div>
</div>

</div>

<?php endwhile; ?>

<div class="clear"></div>

<?php getpagenavi(); ?>

<?php $wp_query = null; $wp_query = $temp;?>

</div>
<?php } ?>
<?php get_sidebar(); ?>

<?php get_footer(); ?>
1
Bogdan Bătrânu

Tout d'abord, je vous recommande d'utiliser pre_get_post hook pour vos besoins. Si vous n'utilisez que le nouveau WP_Query dans votre thème, cela n'a aucun sens que Wordpress exécute une requête avant d'obtenir votre thème, car il s'agirait d'un travail supplémentaire qui sera ignoré. Avec pre_get_posts, nous pouvons modifier la requête principale pour qu'elle corresponde à notre objectif et obtenir ce que nous voulons sans exécuter une autre requête.

C'est dit. Voici un exemple de code:

//Functions for filters
add_action( 'pre_get_posts', 'properties_pre_get_post' );
function properties_pre_get_post($query){

    //limit to frontend, to the main query and to home page
   if($query->is_main_query() && !is_admin() && is_home() ) {
        //the main query to get only sticky posts
        $query->set('post__in',get_option( 'sticky_posts' ));
    }

}

Mettez ce code dans functions.php et dans votre fichier de modèle home.php, vous pouvez exécuter la boucle comme d'habitude.

Les types de publication personnalisés ne prennent pas en charge la fonctionnalité "collante" intégrée, mais vous pouvez créer, par exemple, une balise ou un terme de taxonomie et filtrer par cette balise. Par exemple, si vous taxez la taxonomie post_tags du support de type personnalisé, vous pouvez créer un terme appelé "en vedette" et attacher chaque message que vous souhaitez à cette balise et à ce filtre:

//Functions for filters
add_action( 'pre_get_posts', 'my_pre_get_post' );
function my_pre_get_post($query){

     //limit to main query, frontend and home page
     if($query->is_main_query() && !is_admin() && is_home() ) {
          $tax_query = array (
                             'taxonomy'=> array('post_tags'),
                             'field'   => 'slug',
                             'terms'   => 'featured',
                             );
          $query->set('tax_query',$tax_query);
          //filter also by your custom post type
          $query->set('post_type','listings');
      } 
}
0
cybmeta