PHP中检查WP_Post数组当前索引是否为1的最优方法
解决办法
你之前的写法问题出在:$the_query1->posts[1] === true是直接将数组里第二个元素(索引1的WP_Post对象)和true做比较,而不是检查当前遍历到的元素索引是不是1——WP_Post对象永远不会等于true,所以每次都返回false,这当然不符合你的预期。
最简单的实现方式,就是在遍历的时候同时拿到当前元素的索引,直接判断索引是否为1就行,下面给两种常用的写法:
方法一:带索引的foreach遍历(推荐)
这种写法最简洁,也是WordPress开发中遍历查询结果的常规方式:
foreach ($the_query1->posts as $index => $post) { // 获取当前索引是否为1的布尔值 $is_target_index = ($index === 1); // 根据布尔值选择对应的列类 $col_class = $is_target_index ? 'col-sm-3' : 'col-sm-4'; // 输出你的HTML结构 echo "<div class='{$col_class}'>"; // 这里可以使用WordPress模板函数,比如输出标题、内容等 setup_postdata($post); // 必须调用这个才能让模板函数正常工作 the_title('<h3>', '</h3>'); the_excerpt(); echo "</div>"; } wp_reset_postdata(); // 遍历结束后重置全局post对象,避免影响后续代码
方法二:for循环遍历
如果你更习惯用for循环,也可以这样写:
$posts_array = $the_query1->posts; $total_posts = count($posts_array); for ($i = 0; $i < $total_posts; $i++) { $current_post = $posts_array[$i]; setup_postdata($current_post); $is_target_index = ($i === 1); $col_class = $is_target_index ? 'col-sm-3' : 'col-sm-4'; echo "<div class='{$col_class}'>"; the_title(); // 其他内容 echo "</div>"; } wp_reset_postdata();
这两种写法里的$is_target_index变量就会按顺序返回false、true、false,完全符合你的需求。需要注意的是,遍历自定义查询的post对象时,一定要调用setup_postdata()让WordPress的模板函数(比如the_title()、the_content())能正常获取当前post的数据,遍历结束后用wp_reset_postdata()重置全局状态,避免干扰后续的查询或模板输出。
内容的提问来源于stack exchange,提问作者Marco V
相关产品推荐
相关产品推荐

