在条件下用逗号或"&"符号分隔值



我在WordPress中使用ACF自定义字段来显示我的文章的合著者。

function display_authors() { ?>
<div class="post-authors">

<div class="post-default_author">By
<a href="<?php echo esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ); ?>">
<?php the_author(); ?>
</a>
</div><?php

$users = get_field("co_authors");
if( $users ): ?>
<div class="post-co_authors">
<?php foreach( $users as $user ): ?>
<span class="post-co_author">and <a href="/blog/author/<?php echo $user->user_nicename; ?>"><?php echo $user->display_name; ?></a></span>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div><?php
}

当只有一个合著者时,我的代码很好,它显示:By DEFAULT_AUTHOR and CO_AUTHOR.

但是当有多个时,它会显示"one_answers"在每个合著者面前。正确的表述应该是:By DEFAULT_AUTHOR, CO_AUTHOR_1 and CO_AUTHOR_2.

我尝试在默认作者和每个合著者之后显示逗号,否则显示符号"&&quot;在最后/唯一的合著者之前。

我需要帮助才能得到这个结果。另外,我不知道我的HTML标签是否允许,因为它们添加了空格。 编辑:

我稍微重组了我的代码,用CSS作弊。

PHP:

<div class="post-authors">By 
<?php
$users = get_field("co_authors");
if( $users ): ?>
<span class="post-co_authors"><?php
foreach( $users as $user ): ?>
<span class="post-co_author"><a href="/blog/author/<?php echo $user->user_nicename; ?>"><?php echo $user->display_name; ?></a></span>
<?php endforeach; ?>
</span>
<?php endif; ?>
<a href="<?php echo esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ); ?>"><?php the_author(); ?></a>
</div><?php
}

CSS:

.post-co_author::after {
content: ", ";
}
.post-co_author:only-child::after,
.post-co_author:last-child::after {
content: " & ";
}

你需要一个计数器来检查你是否在第一个循环,为了做到这一点,你可以创建一个for循环。

for($i = 0; $i < count($users); $i++) {
if($i > 0){
echo ' and ';
}
echo $users[$i];
}

如果您喜欢使用foreach循环,只需添加$i = 0;在foreach之前,并在foreach结束时增加它。

最新更新