我有麻烦搞清楚什么是错,此代码

问题描述:

<?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; 

} 
?> 
+1

您能否给我们一些更多信息?什么不行?你会得到什么错误? – PeeHaa 2011-06-14 15:36:30

+2

您发布的代码应该会导致第4行(''之间传递,外面的所有内容都通过了。 – 2011-06-14 15:37:35

线#4你打开,即使旧的还没有被关闭,一个新的PHP块。

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

此外:

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

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

在你这样做了一点:

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

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

取出<?phpif,或is_home()东西后早期行添加一个?>

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

<?php if (...) ?> 

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

同时,我强烈建议让display_errorserror_reporting在你的PHP配置中。如果他们在,你必须看到造成额外<?php语法错误:

PHP Parse error: syntax error, unexpected '<' in somefile.php on line XXX 

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