我无法弄清楚这段代码有什么问题

时间:2011-06-14 15:34:26

标签: php wordpress

<?php   
 if ( is_home() ) {

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


  <div id="post">

      <?php the_content(); ?>

    </div>


    <?php endwhile;?>


    <?php endif; ?>
} else if (is_page() ) {

 $category = get_post_meta($posts[0]->ID, 'category', true);
}
if ($category) {
$cat = get_cat_ID($category);
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$post_per_page = 4; // -1 shows all posts
$do_not_show_stickies = 1; // 0 to show stickies
$args=array(
'category__in' => array($cat),
'orderby' => 'date',
'order' => 'DESC',
'paged' => $paged,
'posts_per_page' => $post_per_page,
'caller_get_posts' => $do_not_show_stickies
  );
  $temp = $wp_query;  // assign orginal query to temp variable for later use   
  $wp_query = null;
  $wp_query = new WP_Query($args); 
   if( have_posts() ) : 
    while ($wp_query->have_posts()) : $wp_query->the_post(); ?>

  <div id="post">

      <?php the_content(); ?>
    </div>


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

$wp_query = $temp;  

 }  
?>

3 个答案:

答案 0 :(得分:1)

在第4行,您正在打开一个新的PHP块,即使旧的块尚未关闭。

您需要删除该行的前一个<?php。你不需要它。

此外:

endwhile;块中有额外的else。 while循环在if ( is_home() ) {块内启动和关闭。

} else if (is_page() ) {开头的代码不在PHP块中。您应该打开<?php块或不关闭前一个块。

答案 1 :(得分:1)

第一个php标签未公开。关闭它并从那里继续前进。如果您认为它主要是PHP文件而不是HTML文件,那么读取和调试会更容易。也就是说,在需要直接HTML之前,保持php标记处于打开状态。此时,关闭PHP标记,编写HTML,然后重新打开PHP标记。

答案 2 :(得分:0)

您可以这样做:

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

你仍然处于脚本顶部第一个<?php的“php模式”,所以这一行是语法错误。您不能将一个<?php ?>块嵌入另一个块中。

<?php之前移除if,或在之前的行?>之后添加is_home()

<?php if (is_home()) { ?>

<?php if ( ...) ?>

<?php
if (is_home()) {
    if (...) { ?>

同样,我强烈建议在PHP配置中启用display_errorserror_reporting。如果它们已启用,您将看到由额外<?php

引起的语法错误
PHP Parse error:  syntax error, unexpected '<' in somefile.php on line XXX