web-dev-qa-db-fra.com

Exclure dynamiquement l'id de la page en cours

J'essaie de créer une section "publications connexes" sur des pages à l'aide de query_posts. Je veux utiliser ceci simplement parce que nous voulons montrer des messages aléatoires d'une catégorie sur une page, de sorte qu'un plugin serait excessif.

Le problème que je rencontre est l'exclusion dynamique de la liste de la page en cours sur laquelle l'utilisateur se trouve. Voici le code que j'utilise et j'ai essayé plusieurs méthodes pour exclure la page en cours mais aucune n'a fonctionné.

<?php

// The Query
$post_id = get_the_ID();
query_posts("showposts=4&post_type=page&post_parent=168&orderby=Rand&exclude='. $post_id .'");

// The Loop
while ( have_posts() ) : the_post();
echo '<li><a href="'. get_permalink() .'">';
the_title();
echo '</a></li>';
endwhile;

// Reset Query
wp_reset_query();

?>

Est-ce que je me trompe ou est-ce que j'utilise un code incorrect ou les deux?

TIA!

Sur Edit:

Après la suggestion de Milo, j'ai commencé à regarder à nouveau et à combiner avec sa réponse et un message sur le forum WP, je l'ai fait fonctionner avec ce qui suit (il semble que 'exclude' ne voulait pas travailler pour cela) :

<?php
    $this_post = $post->ID;
    global $post;
    $args= array(
        'post_type' => 'page',
        'posts_per_page' => 4,
        'post_parent' => 168,
        'orderby' => 'Rand',
        'post__not_in' => array($this_post)
     );
$rel_posts = get_posts($args);
foreach($rel_posts as $post) :
setup_postdata($post);
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
2
Justice Is Cheap

Dans votre code, si $post_id était, disons, 99, ceci:

query_posts("showposts=4&post_type=page&post_parent=168&orderby=Rand&exclude='. $post_id .'");

aurait pour résultat que cela soit passé aux requêtes de requête:

query_posts("showposts=4&post_type=page&post_parent=168&orderby=Rand&exclude='. 99 .'");

votre problème est que '. 99 .' n'est pas une valeur valide pour exclude.

Cela dit, query_posts ne devrait être utilisé que pour modifier la boucle main loop dans un modèle. si vous souhaitez effectuer des requêtes supplémentaires, vous devez créer un nouveau WP_Query instance.

$args = array(
    'post_type' => 'page',
    'posts_per_page' => 4,
    'post_parent' => 168,
    'orderby' => 'Rand',
    'exclude' => $post_id
);

$related_posts = new WP_Query( $args );

while( $related_posts->have_posts() ):
    $related_posts->the_post();
    // loop stuff
endwhile;
4
Milo