如何解决代码第34行Parse error: unexpected 'post_type'(T_STRING)错误?
解决 Parse error: syntax error, unexpected 'post_type' (T_STRING) 错误
这个错误本质是PHP解析器处理到第34行时,发现前面的代码存在语法不完整的问题,导致它无法正确识别post_type这个字符串的作用。结合你是在自定义文章类型services的VC小部件while循环里遇到的问题,大概率是WP_Query参数数组的语法错误或者循环前后的引号/括号没处理好,下面给你具体的排查和修复方法:
最常见的错误场景及修复
1. WP_Query参数数组漏写逗号
这是最容易犯的低级错误——数组元素之间没加逗号分隔,导致解析器逻辑混乱。比如错误写法:
$args = array( 'post_type' => 'services' 'posts_per_page' => -1 // 这里漏了逗号! ); $services_query = new WP_Query($args); while ($services_query->have_posts()) : $services_query->the_post(); // 循环内容 endwhile;
修复方法:给每个数组元素末尾加上逗号(最后一个元素加不加都可以,但建议统一加上,避免后续新增元素时漏写):
$args = array( 'post_type' => 'services', 'posts_per_page' => -1, 'order' => 'DESC' ); $services_query = new WP_Query($args);
2. 字符串引号未闭合或混用
如果在循环里输出内容时,引号嵌套错误,也会触发这个问题。比如错误写法:
echo '<div class="service" data-post-type='post_type'>'; // 单引号嵌套单引号,导致提前闭合
修复方法:使用引号转义或者混合单双引号,正确获取文章类型:
// 方法1:用双引号包裹外层,内部用单引号 echo "<div class='service' data-post-type='{$post->post_type}'>"; // 方法2:字符串拼接 echo '<div class="service" data-post-type="' . get_post_type() . '">';
3. 括号/代码块未闭合
如果在第34行之前有if语句、函数调用的括号没闭合,也会导致解析器误判。比如:
if (is_page()) { $args = array( 'post_type' => 'services' // 这里漏了闭合数组的)和if的} while ($services_query->have_posts()) : ...
修复方法:检查第34行之前的所有代码,确保所有的(和)、{和}都正确配对闭合。
完整的正确示例代码
给你一个标准的自定义文章类型循环写法,你可以对照调整你的VC小部件代码:
// 定义查询参数 $services_args = array( 'post_type' => 'services', 'posts_per_page' => 6, // 按需调整数量,-1表示全部 'orderby' => 'menu_order', // 可以按菜单顺序、日期等排序 'order' => 'ASC' ); // 执行查询 $services_query = new WP_Query($services_args); // 循环输出 if ($services_query->have_posts()) : while ($services_query->have_posts()) : $services_query->the_post(); // 这里写你的内容输出,比如标题、缩略图、自定义字段等 ?> <div class="service-item"> <?php if (has_post_thumbnail()) : ?> <div class="service-thumb"><?php the_post_thumbnail('medium'); ?></div> <?php endif; ?> <h4><?php the_title(); ?></h4> <div class="service-content"><?php the_excerpt(); ?></div> </div> <?php endwhile; // 一定要重置查询,避免影响后续全局文章数据 wp_reset_postdata(); else : echo '<p>暂无服务内容</p>'; endif;
总结一下:先重点检查第34行前后的代码,尤其是数组的逗号、引号闭合、括号配对这些细节,PHP语法错误往往都是这些不起眼的小问题导致的。
内容的提问来源于stack exchange,提问作者Atul katara
相关产品推荐
相关产品推荐

