继续使用WordPress PHP循环

时间:2013-03-10 23:00:40

标签: php wordpress loops

我目前正在尝试开发自定义Wordpress主题,在我的主页上我需要添加第二个内容块。我正在使用插件执行此操作,这只需要我在内容块的位置添加以下内容。

<?php the_block('Latest Products')?> 

然而,当我添加它时,似乎没有效果,我认为是由于我的PHP的格式。我对php很新,所以非常感谢任何帮助。

我的代码如下 - 我已经删除了HTML的最佳部分。我认为这与'endforeach'标签有关?

<?php get_header(); ?>

<?php if(have_posts()) :?>
<?php while (have_posts()) : the_post(); ?>

<?php the_content(); ?>

<?php
 global $post;
 $myposts = get_posts('numberposts=4&category=1');
 foreach($myposts as $post) :
 ?>                     
<div class="blogsnippet">
<div class="postdate">
    <span class="top"><?php the_time ('j')?></span><br/><span class="bottom"><?php the_time('M');?></span>
</div>
<div class="postexcerpt">
<h3><a href="<?php the_permalink();?>"><?php the_title(); ?></a></h3>
<p><?php echo(get_the_excerpt());?></p>
</div>
</div>

<?php endforeach;?>             

<?php the_block('Latest Products')?>

<?php endwhile; endif; ?>

<?php get_footer(); ?>

修改

好吧,显然它需要被置于循环之外,但它仍然无效。有什么想法吗?

<?php get_header(); ?>

<?php if(have_posts()) :?>
<?php while (have_posts()) : the_post(); ?>

<?php the_content(); ?>

<?php
 global $post;
 $myposts = get_posts('numberposts=4&category=1');
 foreach($myposts as $post) :
 ?>                     
<div class="blogsnippet">
<div class="postdate">
<span class="top"><?php the_time ('j')?></span><br/><span class="bottom"><?php     the_time('M');?></span>
</div>
<div class="postexcerpt">
<h3><a href="<?php the_permalink();?>"><?php the_title(); ?></a></h3>
<p><?php echo(get_the_excerpt());?></p>
</div>
</div>

<?php endforeach;?>             
<?php endwhile; endif; ?>

<?php the_block('Latest Products')?>

<?php get_footer(); ?>

1 个答案:

答案 0 :(得分:1)

这主要取决于插件实际执行的操作,因为您的代码语法是正确的。

如果您正在使用Multiple Content Blocks插件并使用最新的Wordpress版本3.5.1,那么我认为该插件可能不兼容。我会检查插件的版本兼容性到你的Wordpress安装,因为这可能是你的问题。

修改

该插件通过对函数the_content()应用过滤器来工作,这就是为什么它只能在调用the_content()函数之前声明the_block()。

解决方案可能是捕获输出the_block()并稍后使用打印出来,例如:

<?php 
    ob_start();  
    the_block('Latest Products'); 
    $latest_products_contents = ob_get_contents(); 
    ob_end_clean();
?>
<!-- Further down.. -->
<?php echo $latest_products_contents; ?>