PHP - 我的数组在放入函数时返回NULL值,但在函数外部工作正常

时间:2010-05-21 05:23:48

标签: php function arrays

好的,让我看看能不能解释一下。我正在制作报纸WordPress主题。该主题从类别中提取帖子。首页显示了多个类别,组织为“newsboxes”。即使所述帖子属于两个或更多类别,每个帖子也应仅在首页上显示ONCE。

为防止帖子在首页上重复,我创建了一个跟踪各个帖子ID的数组。当首页上显示帖子FIRST时,其ID将添加到数组中。在循环浏览每个类别的帖子之前,代码首先检查数组以查看哪些帖子已经显示。

好的,那么现在还记得我之前说过头版显示组织为“新闻盒”的多个类别吗?好吧,这些新闻盒使用PHP包含在头版上。我在首页上出现了6个新闻箱,而调用它们的代码完全相同。我不想重复相同的代码6次,所以我将所有包含代码放入一个函数中。

该功能有效,但唯一的问题是它搞砸了我之前提到的重复帖子代码。这些帖子都重复了。在$ do_not_duplicate变量上运行var_dump会返回一个包含空索引的数组。如果我不将代码放在一个函数中,那么一切都可以正常工作,但是一旦我把它们放在一个函数中,它就像数组甚至没有连接帖子一样。

这是包含数组的代码。这里讨论的关键变量包括$ do_not_duplicate [] = $ post-> ID,$ do_not_duplicate和'post__not_in'=> $ do_not_duplicate

    <?php query_posts('cat='.$settings['cpress_top_story_category'].'&posts_per_page='.$settings['cpress_number_of_top_stories'].'');?>

            <?php if (have_posts()) : ?>
            <!--TOP STORY-->
    <div id="topStory">         
                <?php while ( have_posts() ) : the_post(); $do_not_duplicate[] = $post->ID; ?>

            <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_post_thumbnail('top-story-thumbnail'); ?></a>

        <h2 class="extraLargeHeadline"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>  

            <div class="topStory_author"><?php cpress_show_post_author_byline(); ?></div> 

     <div <?php post_class('topStory_entry') ?> id="post-<?php the_ID(); ?>">   
        <?php if($settings['cpress_excerpt_or_content_top_story_newsbox'] == "content") {
                the_content(); ?><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><span class="read_more"><?php echo $settings['cpress_more_text']; ?></span></a>
            <?php } else { 
                the_excerpt(); ?><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><span class="read_more"><?php echo $settings['cpress_more_text']; ?></span></a>
        <?php }?>       
        </div><!--/topStoryentry--> 

     <div class="topStory_meta"><?php cpress_show_post_meta(); ?></div>     
       <?php endwhile; wp_reset_query(); ?>

    <?php if(!$settings['cpress_hide_top_story_more_stories']) { ?>  
    <!--More Top Stories--><div id="moreTopStories">

       <?php $category_link = get_category_link(''.$settings['cpress_top_story_category'].''); ?>

       <?php if (have_posts()) : ?>
                <?php query_posts( array( 'cat' => ''.$settings['cpress_top_story_category'].'', 'posts_per_page' => ''.$settings['cpress_number_of_more_top_stories'].'', 'post__not_in' => $do_not_duplicate ) ); ?> 

     <h4 class="moreStories">    
<?php if($settings['cpress_make_top_story_more_stories_link']) { ?>  
<a href="<?php echo $category_link; ?>" title="<?php echo strip_tags($settings['cpress_top_story_more_stories_text']);?>"><?php echo strip_tags($settings['cpress_top_story_more_stories_text']);?></a><?php } else { 
        echo strip_tags($settings['cpress_top_story_more_stories_text']);  } ?>
    </h4>
      <ul>
        <?php while( have_posts() ) : the_post(); $do_not_duplicate[] = $post->ID; ?>

      <li><h2 class="mediumHeadline"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>

           <?php if(!$settings['cpress_hide_more_top_stories_excerpt']) { ?> <div <?php post_class('moreTopStory_postExcerpt') ?> id="post-<?php the_ID(); ?>"><?php if($settings['cpress_excerpt_or_content_top_story_newsbox'] == "content") {
                the_content(); ?><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><span class="read_more"><?php echo $settings['cpress_more_text']; ?></span></a>
            <?php } else { 
                the_excerpt(); ?>
                <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><span class="read_more"><?php echo $settings['cpress_more_text']; ?></span></a>
        <?php }?> </div><?php } ?>

     <div class="moreTopStory_postMeta"><?php cpress_show_post_meta(); ?></div>  
      </li>
            <?php endwhile; wp_reset_query(); ?>     
      </ul>
                <?php endif;?>     
      </div><!--/moreTopStories--> 
     <?php } ?>
<?php echo(var_dump($do_not_duplicate)); ?>

            </div><!--/TOP STORY-->
<?php endif; ?>     

以下是将新闻邮箱包含在首页的代码。这是我试图放入函数中的代码,以避免在一个页面上重复6次。

 function cpress_show_templatebitsf($tbit_num, $tbit_option) { 
global $tbit_path;
global $shortname; $settings = get_option($shortname.'_options');

 //display the templatebits (usually these will be sidebars)
    for ($i=1; $i<=$tbit_num; $i++) {   
            $tbit = strip_tags($settings[$tbit_option .$i]);            
    if($tbit !="") {    
          include_once(TEMPLATEPATH . $tbit_path. $tbit.'.php');
          } //if  
     }//for loop
    unset($tbit_option);    
  }

我希望这是有道理的。这是一个复杂的事情要解释,但我已经尝试了很多东西来解决它并且没有运气。我很难过。我希望这只是我忽略的一些小东西,因为它似乎不应该是这样的问题。

1 个答案:

答案 0 :(得分:1)

请注意,包含的文件只能使用您在函数中标记为global的全局变量。