我正在尝试使用“State”的自定义字段列出可用位置的所有城市页面。我能够按照以下代码的正确顺序(按州的字母顺序)获得正确的结果:
<?php
// query
$the_query = new WP_Query(array(
\'post_type\' => \'page\',
\'posts_per_page\' => -1,
\'meta_key\' => \'state_full\',
\'orderby\' => \'meta_value\',
\'order\' => \'ASC\'
));
?>
<?php if( $the_query->have_posts() ): ?>
<ul>
<?php
while( $the_query->have_posts() ) : $the_query->the_post();
$state = get_field(\'state_full\');
?>
<?php echo $state ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
但内容显示如下
最合适的回答,由SO网友:Jacob Peattie 整理而成
您要做的是创建一个跟踪“当前”状态的变量,然后为循环中的每个post检查其状态是否与当前状态相同。如果不是,则将其输出并将当前状态更新为新状态。这将产生只在第一篇文章前面输出状态名称的效果。
if ( $the_query->have_posts() ) :
/**
* Create the variable to keep track of the current State in the loop.
*/
$current_state = null;
echo \'<ul>\';
while( $the_query->have_posts() ) : $the_query->the_post();
$state = get_field( \'state_full\' );
/**
* If the state of the current post is different to the current state
* then output the new state and update the current state.
*/
if ( $state !== $current_state ) {
echo \'<li><strong>\' . $state . \'</strong></li>\';
$current_state = $state;
}
echo \'<li><a href="\' . get_the_permalink() . \'">\' . get_the_title() . \'</a></li>\';
endwhile;
echo \'</ul>\';
endif;
我对您的代码进行了一些调整,使其成为纯PHP,没有打开和关闭标记,但这只是因为它更容易看到我所做更改的逻辑。您可以随意输出标记。