解析错误:语法错误,意外'endforeach'(T_ENDFOREACH)

时间:2015-10-08 04:53:47

标签: php wordpress

我正在尝试从本教程的代码中为WordPress“category.php”创建一个页面:http://scratch99.com/wordpress/wp-seo/siloing/

我目前的主题(由Themeforest提供的Sociallyviral)没有页面“category.php”,所以我创建了一个并添加了下面的代码:

作者注: “代码看起来应该如下所示。注意,你不能只是完全使用这个代码 - 它需要适合你的主题,以便包装div等类匹配你的主题的其余部分,并选择样式“起来。

// work out category id, then see if there are any subcategories
$main_cat_ID = get_query_var( 'cat' );
$subcats = get_categories( array( 'parent' => $main_cat_ID, 'hide_empty' => 0 ) );

// if it is page 1
if ( $paged < 2 ) :

    // show the category description
    echo category_description();

    // if there are subcategories, loop through and show them
    if ( count( $categories ) > 0 ) :
        foreach ( $subcats as $category ) : ?>    
            <div class="subcategory">
                <h2><a class="subcategory-link" href="<?php echo get_category_link( $category->term_id ); ?>">
                <?php echo $category->name; ?></a></h2>
                <?php echo wpautop( $category->description ); ?>
            </div>
        <?php
       endforeach;
    endif;

    // get sticky posts and show them if they exist
    $args = array( 'category__in' => $main_cat_ID, 'include' => get_option( 'sticky_posts' ) );
    $myposts = get_posts( $args );
    if ( count( $myposts ) > 0 ) :
        foreach ( $myposts as $value ) : ?>
        <div class="sticky">
            <h3>
                <a href="<?php echo get_permalink( $value->ID ); ?>" rel="bookmark"
                title="<?php echo $value->post_title; ?>"><?php echo $value->post_title; ?></a>
            </h3>
            <div class="entry-content">
            <?php 
            // if there is an excerpt, use it, otherwise roll our own (get_the_excerpt won't work outside the loop)
            if ( $value->post_excerpt ) : 
                echo wpautop( $value->post_excerpt );
            else :
                $sjc_excerpt = explode( '<!--more-->', $value->post_content ); 
                if ( count( $sjc_excerpt ) >= 2 ) :
                    echo wpautop( strip_tags( $sjc_excerpt[0] ) );
                else :
                    echo wpautop( implode ( ' ', array_slice( explode( ' ', strip_tags( $sjc_excerpt[0] ) ), 0, 45 ) ) . ' ...' );
                endif;
            endif; ?>
            </div>
        </div>
        <?php
        endforeach;
    endif;

// pages 2 and onwards don't worry about cat desc or stickies, but link to main cat page
else : ?>
        <p>For an introduction to this topic and our latest articles, please see the main 
        <a href="<?php echo get_category_link( $main_cat_ID ); ?>"><?php single_cat_title(); ?></a> page.</p>
<?php
endif;

// if we have any posts in the main loop (no stickies there)
if ( have_posts() ) : ?>

    <ul class="other-posts">

    <?php /* Start the Loop */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

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

    <?php endwhile; ?>
    </ul>

    <?php 
    // you need to replace this with whatever your theme uses!
    sjc_content_nav( 'nav-below' ); 

// if no posts, and also no stickies and no categories, go with no results
elseif ( count( $myposts ) == 0 && count( $subcats ) == 0 ) : 

    get_template_part( 'no-results', 'archive' ); 

endif; 

如有必要,请在我的主题文件“archive.php”下面

<?php $mts_options = get_option(MTS_THEME_NAME); ?>
<?php get_header(); ?>
<div id="page">
    <div id="content_box">
        <h1 class="postsby">
            <?php if (is_category()) { ?>
                <span><?php single_cat_title(); ?><?php _e(" Archive", "mythemeshop"); ?></span>
            <?php } elseif (is_tag()) { ?> 
                <span><?php single_tag_title(); ?><?php _e(" Archive", "mythemeshop"); ?></span>
            <?php } elseif (is_author()) { ?>
                <span><?php  $curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author)); echo $curauth->nickname; _e(" Archive", "mythemeshop"); ?></span> 
            <?php } elseif (is_day()) { ?>
                <span><?php _e("Daily Archive:", "mythemeshop"); ?></span> <?php the_time('l, F j, Y'); ?>
            <?php } elseif (is_month()) { ?>
                <span><?php _e("Monthly Archive:", "mythemeshop"); ?>:</span> <?php the_time('F Y'); ?>
            <?php } elseif (is_year()) { ?>
                <span><?php _e("Yearly Archive:", "mythemeshop"); ?>:</span> <?php the_time('Y'); ?>
            <?php } ?>
        </h1>
        <?php $j = 1; if (have_posts()) : while (have_posts()) : the_post(); $featured = get_post_meta($post->ID, 'mts_featured', true); ?>
            <article class="latestPost excerpt<?php echo (($j+2) % 3 == 0) ? ' first' : ''; ?><?php echo ($j % 3 == 0) ? ' last' : ''; ?>" itemscope itemtype="http://schema.org/BlogPosting">
                <a href="<?php the_permalink() ?>" title="<?php the_title(); ?>" rel="nofollow" id="featured-thumbnail">
                    <?php echo '<div class="featured-thumbnail">'; the_post_thumbnail('featured',array('title' => '')); echo '</div>'; ?>
                    <?php if (function_exists('wp_review_show_total')) wp_review_show_total(true, 'latestPost-review-wrapper'); ?>
                    <?php if ($featured) : ?><div class="post-label"><i class="fa fa-star"></i> <span><?php _e('Featured','mythemeshop'); ?></span></div><?php endif; ?>
                </a>
                <header>
                    <h2 class="title front-view-title"><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
                    <?php if ( ! empty( $mts_options["mts_home_headline_meta"] ) ) { ?>
                        <div class="post-info">
                            <?php if( ! empty( $mts_options["mts_home_headline_meta_info"]['date']) ) { ?>
                                <span class="thetime updated"><i class="fa fa-calendar"></i> <span itemprop="datePublished"><?php echo human_time_diff( get_the_time('U'), current_time('timestamp') ) . __(' ago','mythemeshop'); ?></span></span>
                            <?php } ?>
                            <?php if( ! empty( $mts_options["mts_home_headline_meta_info"]['category']) ) { ?>
                                <span class="thecategory"><i class="fa fa-tags"></i> <?php mts_the_category(', ') ?></span>
                            <?php } ?>
                        </div>
                    <?php } ?>
                </header>
            </article><!--.post excerpt-->
        <?php $j++; endwhile; endif; ?>

        <!--Start Pagination-->
        <?php if (isset($mts_options['mts_pagenavigation_type']) && $mts_options['mts_pagenavigation_type'] == '1' ) { ?>
            <?php mts_pagination(); ?> 
        <?php } else { ?>
            <div class="pagination pagination-previous-next">
                <ul>
                    <li class="nav-previous"><?php next_posts_link( '<i class="fa fa-angle-left"></i> '. __( 'Previous', 'mythemeshop' ) ); ?></li>
                    <li class="nav-next"><?php previous_posts_link( __( 'Next', 'mythemeshop' ).' <i class="fa fa-angle-right"></i>' ); ?></li>
                </ul>
            </div>
        <?php } ?>
        <!--End Pagination-->
    </div>
<?php get_footer(); ?>

当我尝试打开类别页面时出现此错误:

“第20行上的/wp-content/themes/sociallyviral/category.php中的解析错误:语法错误,意外'endforeach'(T_ENDFOREACH)”

此语法错误已解决!

谢谢大家!

祝你好运!

2 个答案:

答案 0 :(得分:0)

您错过了文件开头的<?php标记。

没有它,第一段代码,解析器将解析以下代码为php:

        echo get_category_link( $category->term_id );
        echo $category->name;
        echo wpautop( $category->description );
   endforeach;
endif;

正如您所看到的,第一件事(在三个echo旁边)是endforeach;,这是解析器抛出错误的地方。

作者说明如下:“......它需要适合您的主题,以便包装div 等等与你主题的其余部分相匹配,挑选出的风格。“

这意味着,根据您和您的模板需求,您需要在代码中使用<div>class addributes提供style。详细地说,您应该应用模板使用的类来应用所需的布局。您应该对模板使用的类进行某种形式的引用(可能是something like this)。您可以在哪里查看要使用的类。

This是引导程序的参考 - 只是为了让你了解你的目标。

答案 1 :(得分:0)

在代码的开头加上一个php标记

<?php    // show the category description
echo category_description();

// if there are subcategories, loop through and show them
if ( count( $categories ) > 0 ) :
    foreach ( $subcats as $category ) : ?>    
        <div class="subcategory">
            <h2><a class="subcategory-link" href="<?php echo get_category_link( $category->term_id ); ?>">
            <?php echo $category->name; ?></a></h2>
            <?php echo wpautop( $category->description ); ?>
        </div>
    <?php
   endforeach;
endif;

// get sticky posts and show them if they exist
$args = array( 'category__in' => $main_cat_ID, 'include' => get_option( 'sticky_posts' ) );
$myposts = get_posts( $args );
if ( count( $myposts ) > 0 ) :
    foreach ( $myposts as $value ) : ?>
    <div class="sticky">
        <h3>
            <a href="<?php echo get_permalink( $value->ID ); ?>" rel="bookmark"
            title="<?php echo $value->post_title; ?>"><?php echo $value->post_title; ?></a>
        </h3>
        <div class="entry-content">
        <?php 
        // if there is an excerpt, use it, otherwise roll our own (get_the_excerpt won't work outside the loop)
        if ( $value->post_excerpt ) : 
            echo wpautop( $value->post_excerpt );
        else :
            $sjc_excerpt = explode( '<!--more-->', $value->post_content ); 
            if ( count( $sjc_excerpt ) >= 2 ) :
                echo wpautop( strip_tags( $sjc_excerpt[0] ) );
            else :
                echo wpautop( implode ( ' ', array_slice( explode( ' ', strip_tags( $sjc_excerpt[0] ) ), 0, 45 ) ) . ' ...' );
            endif;
        endif; ?>
        </div>
    </div>
    <?php
    endforeach;
endif;

    // pages 2 and onwards don't worry about cat desc or stickies, but link       to main cat page
   else : ?>
    <p>For an introduction to this topic and our latest articles, please see the main 
    <a href="<?php echo get_category_link( $main_cat_ID ); ?>"><?php single_cat_title(); ?></a> page.</p>
<ul class="other-posts">

<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>

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

<?php endwhile; ?>
</ul>

<?php 
// you need to replace this with whatever your theme uses!
sjc_content_nav( 'nav-below' ); 

 // if no posts, and also no stickies and no categories, go with no results
  elseif ( count( $myposts ) == 0 && count( $subcats ) == 0 ) : 

  get_template_part( 'no-results', 'archive' ); 

 endif; 

你的问题将会解决。