首页 > 解决方案 > 使用 WordPress 中的简码打印/返回函数的所有“结果”

问题描述

我正在尝试打印与特定 WordPress 帖子相关的所有术语。我找到了很好的起点(我的方法基于这篇文章: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>';
};

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

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

标签: phpwordpresswordpress-shortcode

解决方案


通过在 ing之前连接成单个变量来构建字符串return,而不是直接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;
};

推荐阅读