Excluyendo dinámicamente la identificación de la página actual

2

Estoy tratando de crear una sección de "publicaciones relacionadas" en las páginas usando query_posts. Quiero usar esto simplemente porque queremos mostrar publicaciones aleatorias de una categoría en una página, por lo que un complemento sería excesivo.

El problema que tengo es excluir dinámicamente la página actual en la que está el usuario de la lista. Aquí está el código que estoy usando y he intentado varios métodos para excluir la página actual, pero ninguno ha funcionado.

<?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();

?>

¿Me estoy equivocando o estoy usando el código incorrecto o ambos?

TIA!

En edición:

Después de la sugerencia de Milo, comencé a buscar de nuevo y, junto con su respuesta y una publicación en el foro de WP, conseguí que funcionara con lo siguiente (parece que 'excluir' no quería trabajar para esto):

<?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; ?>
    
pregunta Justice Is Cheap 22.03.2012 - 18:10

1 respuesta

4

En su código, si $post_id fuera, digamos, 99, esto:

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

daría lugar a que esto se pase a las publicaciones de consulta:

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

entonces, su problema aquí es '. 99 .' no es un valor válido para exclude .

Dicho esto, query_posts solo debe usarse para alterar el main loop en una plantilla. Si desea realizar consultas adicionales, debe crear una nueva instancia de WP_Query .

$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;
    
respondido por el Milo 22.03.2012 - 18:55

Lea otras preguntas en las etiquetas