web-dev-qa-db-fra.com

Liste des articles par catégorie, exclure l'article en cours

J'essaie d'obtenir une liste des publications d'une catégorie, en faisant écho au titre et au lien permanent de toutes les publications de cette catégorie, mais en excluant le lien permanent et le nom de la publication SI la publication actuelle figure sur cette liste.

Il sera affiché sur single.php après ou à l'intérieur de la boucle

Quelqu'un sait si c'est possible, si oui comment?

Merci d'avance

<?php query_posts('category_name=MyCatName&showposts=-1'); ?>
<?php while (have_posts()) : the_post(); ?>

        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
          </a>
        <?php endwhile; ?>
3
user983248

Tout d'abord, notez que, comme votre boucle personnalisée est une boucle/requête secondaire, vous devez utiliser le WP_Query class au lieu de query_posts(). Lire pourquoi .

Cela étant dit,

/* main post's ID, the below line must be inside the main loop */
$exclude = get_the_ID();

/* alternatively to the above, this would work outside the main loop */
global $wp_query;
$exclude = $wp_query->post->ID;

/* secondary query using WP_Query */
$args = array(
    'category_name' => 'MyCatName', // note: this is the slug, not name!
    'posts_per_page' => -1 // note: showposts is deprecated!
);
$your_query = new WP_Query( $args );

/* loop */
echo '<ul>';
while( $your_query->have_posts() ) : $your_query->the_post();
    if( $exclude != get_the_ID() ) {
        echo '<li><a href="' . get_permalink() . '">' .
            get_the_title() . '</a></li>';
    }
endwhile;
echo '</ul>';

ça fera l'affaire.

6
Johannes Pille

Basé sur le code de Johannes, mais en utilisant l’argument post__not_in:

/* Secondary query using WP_Query */
$wpse63027_posts = new WP_Query( array(
    'category_name'  => 'MyCatName',
    'posts_per_page' => -1,
    'post__not_in'   => array( get_queried_object_id() ), // Exclude current post ID (works outside the loop)
) );

Ensuite, vous pouvez parcourir les nouveaux messages:

if ( $wpse63027_posts->have_posts() )
{
    while( $wpse63027_posts->have_posts() )
    {
        $wpse63027_posts->the_post();

        // Now do everything you want with the default API calls
        // Example
        the_title( '<h2>', '</h2>', true );
        the_content();
    }
}

WP_Query "Post _ */Page_Parameters

2
Geert