在 WordPress 中使用短代码打印/Return 函数的所有 "results"

Print / Return all "results" of a function by using a shortcode in WordPress

我正在尝试打印与特定 WordPress post 相关的所有条款。我找到了很好的起点(我的方法基于这篇文章:https://theeventscalendar.com/knowledgebase/k/add-a-list-of-category-links-below-the-search-bar/),但是,我没有得到我想要的结果,这将是一行带有链接的术语,用逗号分隔。

例如:


<a href="link to term 1">Term 1</a>, <a href="link to term 2">Term 1</a>

我目前拥有的是:

add_shortcode( 'tribe_links_ineko', 'tribe_get_links_ineko' );

function tribe_get_links_ineko () {
  $terms = get_terms( [
    'taxonomy' => Tribe__Events__Main::TAXONOMY
  ] );
 
  if ( empty( $terms ) || is_wp_error( $terms ) ) {
    return;
  }
  
    echo '<div><p>';
  foreach ( $terms as $single_term ) {
    $url = esc_url( get_term_link( $single_term ) );
    $name = esc_html( get_term_field( 'name', $single_term ) );
 
    return "<a href='$url'>$name</a>";
  }
 echo'</p><div>';
};

不过,这只是return的其中一项。如果我使用 echo 而不是 return,它会 return 包含所有术语,但它们会打印到页面顶部(使用短代码放置输出)。据我了解,这是 return 的预期行为,但是,我找不到关于为什么 echo 打印在错误位置以及如何解决此问题的解释。

也许有人可以指出我正确的方向,因为我不知道 php :(

通过在 returning 之前连接成单个变量来构建字符串,而不是直接 returning:

add_shortcode( 'tribe_links_ineko', 'tribe_get_links_ineko' );

function tribe_get_links_ineko () {
  $terms = get_terms( [
    'taxonomy' => Tribe__Events__Main::TAXONOMY
  ] );
 
  if ( empty( $terms ) || is_wp_error( $terms ) ) {
    return;
  }
  
  $out = '<div><p>';
  foreach ( $terms as $single_term ) {
    $url = esc_url( get_term_link( $single_term ) );
    $name = esc_html( get_term_field( 'name', $single_term ) );
 
    $out = $out . "<a href='$url'>$name</a>";
  }
 $out = $out . '</p><div>';
 return $out;
};