当我使用GET_TEMPLATE_PART时,如何在循环的第一个POST之前显示图像?

时间:2012-12-11 作者:timshutes

我以前使用过$count,但从未遇到过此问题。我不能让它工作。我的php背景有限,请耐心等待!以下是$count设置代码:

<?php $count = 0; ?>
<?php if ( have_posts() ) : // Start the Loop ?>
    <?php $count++; ?>      
    <?php while ( have_posts() ) : the_post(); ?>
        <?php get_template_part( \'content\', get_post_format() ); ?>
    <?php endwhile; ?>  
<?php endif; ?>
内容内。php-下面是我要做的:

<?php if ($count == 1) { ?>
    <section class="stories-title">
        <img src="<?php bloginfo(\'stylesheet_directory\'); ?>/assets/stories-title.jpg" />
    </section>
<?php ;} ?>
有人能向我解释一下发生了什么事吗?据我所知,我遇到了一个未定义的变量问题,但我不知道如何在不破坏$计数的情况下解决这个问题。。。条件语句和内容必须在同一个文件中才能使用$count吗?

更新:问题(如下所述)与变量作用域有关-使用template\\u part时,$count变量不会结转。以下是固定代码:

functions.php

// remember number (so we can count posts)

/**
 * Remember a number.
 *
 * @param  int|FALSE $add A number to add, or FALSE to reset the counter to 0 (zero).
 * @return int
 */

function wpse_count( $add = 0 )
{
    static $counter = 0;

    if ( FALSE === $add )
        $counter = 0;
    else
        $counter += (int) $add;

    return $counter;
}

index.php

<?php wpse_count( FALSE ); ?>

<?php if ( have_posts() ) : // Start the Loop ?>

    <?php while ( have_posts() ) : the_post(); ?>
      <?php wpse_count( 1 ); ?>
        <?php get_template_part( \'content\', get_post_format() ); ?>

    <?php endwhile; ?>

<?php endif; ?>

content.php

    <?php if (count_posts() == 1) { ?>
        <section class="stories-title">
            <img src="<?php bloginfo(\'stylesheet_directory\'); ?>/assets/stories-title.jpg" />
        </section>
    <?php ;} ?>

Additional Solution

有关此问题更简单的解决方案,请参见下面的不同答案。只需要使用wp\\u查询

<?php if ( $wp_query->current_post == 0 ) { ?>
不需要$计数器。

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

变量$count 只能在当前函数的范围内访问。所以不管里面发生什么get_template_part() 无法知道该变量。

您可以使用全局变量,该变量可以在任何地方访问$GLOBALS[\'count\']. 但这样做可能会与插件或其他代码发生冲突。

我建议为functions.php:

/**
 * Remember a number.
 *
 * @param  int|FALSE $add A number to add, or FALSE to reset the counter to 0 (zero).
 * @return int
 */
function wpse_count( $add = 0 )
{
    static $counter = 0;

    if ( FALSE === $add )
        $counter = 0;
    else
        $counter += (int) $add;

    return $counter;
}
你可以用这个函数记住你想要的任何数字。在您的示例中,应该如下所示:

<?php 
// Reset the counter
wpse_count( FALSE );

if ( have_posts() ) : // Start the Loop

    while ( have_posts() ) : 
        the_post();
        wpse_count( 1 );
        get_template_part( \'content\', get_post_format() );
    endwhile;

endif; 
?>
在模板零件文件中,您可以打印值而不添加任何内容:

echo wpse_count();
TwentyEleven的示例content-status.php

<?php 
the_content( __( \'Continue reading <span class="meta-nav">&rarr;</span>\', \'twentyeleven\' ) ); 
echo \'Number: \' . wpse_count();
?>

SO网友:Michael

您可以使用变量$wp_query->current_post 确定第一个岗位前的岗位;不$counter 需要。

content.php

<?php if ( $wp_query->current_post == 0 ) { ?>
        <section class="stories-title">
            <img src="<?php bloginfo(\'stylesheet_directory\'); ?>/assets/stories-title.jpg" />
        </section>
    <?php } ?>

SO网友:s_ha_dum

您正在递增$count 在通过立柱的循环部分之外的变量。代码需要递增while.

$count = 0;
if ( have_posts() ) : // Start the Loop 
//     $count++;    
    while ( have_posts() ) : the_post();
      $count++; 
      echo $count."\\n";
        get_template_part( \'content\', get_post_format() );
    endwhile;
endif; ?>
然后使用其他答案中的一个选项来解决变量范围问题。

SO网友:M-R

如何使用$GLOBALS[\'count\']使其在任何地方都可用。

结束

相关推荐

Pagination for two loops

我知道之前已经讨论过这个问题,但我似乎无法将它与其他主题中发布的任何解决方案配合使用。如何对这样的循环进行分页: <div id=\"first-loop-container\"> <?php $my_query = new WP_Query(\'showposts=5\'); ?> <?php while ($my_query->have_posts()) : $my_query->the_post(