Wordpress:不停止或重置查询

时间:2012-10-11 13:25:19

标签: wordpress while-loop

我正在将标题缩略图jquery滑块添加到标题部分,但它会产生奇怪的问题。它在某种程度上没有结束或停止查询,所以如果我将转到单个帖子或页面,它将继续显示循环而不是页面或发布内容。

我尝试了两种不同的查询,但没有一种能够停止这个奇怪的问题。

首次尝试

<?php
    query_posts( 'post_status=publish&orderby=rand' );      
    while (have_posts()) : the_post();              

    $title_attr = array(
        'title' => get_the_title(),
        'alt' => get_the_title(),
        'class' => get_the_title(),
    );
    echo '<a href="#post-'.get_the_ID().'" class="scroll theme">';
    the_post_thumbnail('thumbnail',$title_attr);
    echo '</a>';

endwhile; ?>

比第二次尝试

<?php
    $temp = $wp_query;
    $wp_query = null;
    $wp_query = new WP_Query();
    $wp_query->query('post_status=publish&orderby=rand');

    // The Loop
    if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();

    $title_attr = array(
        'title' => get_the_title(),
        'alt' => get_the_title(),
        'class' => get_the_title(),
    );
    echo '<a href="#post-'.get_the_ID().'" class="scroll theme">';
    the_post_thumbnail('thumbnail',$title_attr);
    echo '</a>';

endwhile; endif; wp_reset_query();?>

这些都没有停止显示循环(所有帖子,如索引页)到单个帖子或页面。

2 个答案:

答案 0 :(得分:2)

  

我将转到单个帖子或页面,它会继续显示循环而不是页面或发布内容......

这是因为你没有传递任何限制单个帖子查询的参数。您的查询($wp_query->query('post_status=publish&orderby=rand');)会随机按顺序提取所有帖子。对于单个帖子显示,您需要传递它a post or page parameter。您可能需要使用get_query_var()来检查“p”,“page_id”或两者。像这样:

  $pid = get_query_var('p');
  if (!empty($pid)) {
    $qry = 'p='.$pid;
  } else { 
    $qry = 'post_status=publish&orderby=rand';
  }
  $wp_query->query($qry);

还有其他可能的解决方案,例如is_single()

此外,WordPress使用变量$wp_query,所以你应该选择另一个而不是破坏那个。

答案 1 :(得分:0)

我找到了解决方案:)

我在while和has循环之前添加了if(have_posts())和wp_reset_query()并且现在都很好。 :)

所以如果有人有同样的问题,这里是最终的代码..

<?php
    query_posts( 'post_status=publish&orderby=rand' );      
    if ( have_posts()): while (have_posts()) : the_post();          

    $title_attr = array(
        'title' => get_the_title(),
        'alt' => get_the_title(),
        'class' => get_the_title(),
    );
    echo '<a href="#post-'.get_the_ID().'" class="scroll theme">';
    the_post_thumbnail('thumbnail',$title_attr);
    echo '</a>';

endwhile; endif; wp_reset_query(); ?>