Query_Posts()总是显示一些东西吗?

时间:2011-03-06 作者:Wordpressor

好的,我使用posts\\u query()来显示帖子。

问题是,至少在我的例子中,posts\\u query()总是输出一些东西。

例如:

<?php

    $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
    query_posts("posts_per_page=1&paged=$paged");
    global $more;
    $more = 0;

    while ( have_posts() ) : the_post(); ?>    
        <!--- DO NOTHING ! -->
    <?php endwhile ?>
显示文章的原始第一部分(如果没有$more=0,则显示整个文章)。

为什么会这样?

我想自己设计输出样式,但我无法,因为例如:

while ( have_posts() ) : the_post(); ?>    
         <h1><?php the_title();?></h1>
         <h3><?php the_content( __( \'\') ); ?></h3>
<?php endwhile ?>
提供:

<h1>MyTitle</h1>
<h3>something something something something something</h3>
<p>something something something something something</p> <!-- (wherethis line comes from? ;/) ?>
PS。

此外,我几乎可以肯定分页也不起作用,我认为应该这样做?我有大约15篇帖子要展示,我选择了1篇,为什么没有navi(

确切代码:

function posts_shortcode( $atts ) {
     extract( shortcode_atts( array(
        ), $atts ) );  

        query_posts("posts_per_page=1");
        global $more;
        $more = 0;

        while ( have_posts() ) : the_post(); ?>    
         <h1><?php the_title();?></h1>
         <h3><?php the_content( __( \'\') ); ?></h3>
         <?php endwhile;
}

add_shortcode(\'posts\', \'posts_shortcode\');  

2 个回复
最合适的回答,由SO网友:t31os 整理而成

query\\u posts()总是显示一些内容吗?

不,至少对我来说不是,我已经尝试了你在我的孩子主题中发布的代码,但无法重现所描述的问题。

首先,我试着。。。

while ( have_posts() ) : the_post(); ?>    
    <!--- DO NOTHING ! -->
<?php endwhile ?>
。。什么都没有,所以我测试了。。

<?php
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
query_posts("posts_per_page=1&paged=$paged");
global $more;
$more = 0;

while ( have_posts() ) : the_post(); ?>    
         <h1><?php the_title();?></h1>
         <h3><?php the_content( __( \'\') ); ?></h3>
<?php endwhile ?>
。。产生了。。

<h1>Post title</h1>
<h3><p>post content</p></h3>
没有内容的错误段落。

如果要我猜这个问题,我会说有一个编码错误的过滤器或短代码在工作。最简单的隔离原因的方法(与任何WP故障排除一样)是禁用插件和/或切换主题,并缩小导致问题的范围。

UPDATE:
使用新的WP_Query 对象而不是query_posts 这应该可以解决问题。

function posts_shortcode( $atts ) {
    extract( shortcode_atts( array(
    ), $atts ) );  
    global $more, $wp_query;
    $args = array( 
      \'posts_per_page\' => 1,
      \'paged\' => get_query_var(\'paged\')
    );
    $q = new WP_Query;
    $q->query( $args );

    // Backup $wp_query
    $backup = $wp_query;
    // Fill $wp_query with the custom query
    $wp_query = $q;

    // Do the loop
    while ( $q->have_posts() ) : 
      $q->the_post(); 
      $more = 0;
    ?>    

    <h1><?php the_title();?></h1>
    <h3><?php the_content( __( \'\') ); ?></h3>

    <?php 
    endwhile;

    // Output page navi
    wp_pagenavi();

    // Restore $wp_query
    $wp_query = $backup;

    // Restores wp_query global and also resets postdata(may not be needed, but won\'t hurt)
    wp_reset_query(); 
}

add_shortcode(\'posts\', \'posts_shortcode\'); 

SO网友:Rarst

如果你使用the_post() 没有循环?如果不使用自定义,是否会发生同样的情况query_posts() 呼叫

这看起来非常像链中某个地方的编码糟糕的过滤器,但很难从中猜出位置。

您可以尝试此代码在过滤器运行时转储其名称,并尝试找出可能导致此问题的原因:

add_filter(\'all\',\'dump_name\',10,0);

function dump_name() {

    var_dump(current_filter());
}

结束

相关推荐

升级到WordPress 3.1时出现奇怪的jQuery问题

安装Wordpress 3.1后,jquery插件selectbox 我再也不用百分之百地工作了我在wordpress后端使用此插件替换<select></select> 我可以在自定义html代码上应用css,但在wordpress 3.1中<select> 不要100%被替换,<option> 例如,替换的代码中缺少<select> <option (some attributes...)>text</optio