好的,让我看看能不能解释一下。我正在制作报纸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);
}
我希望这是有道理的。这是一个复杂的事情要解释,但我已经尝试了很多东西来解决它并且没有运气。我很难过。我希望这只是我忽略的一些小东西,因为它似乎不应该是这样的问题。
答案 0 :(得分:1)
请注意,包含的文件只能使用您在函数中标记为global
的全局变量。