代码之家  ›  专栏  ›  技术社区  ›  ptrcao

如何在涉及多个get\u terms()的WordPress函数中返回多个值

  •  3
  • ptrcao  · 技术社区  · 7 年前

    目的是用WordPress函数检索到的信息生成一个html表 get_terms . 它创建一个列表图标图例,并以html格式显示。在这里,我正在创建一个简短的代码,以便在需要时调用此函数。

    然而,对于PHP编程来说,我还不知道如何正确地实现这一点,因为我在PHP编程中面临一个约束,即函数不能返回多个值。请修改以下准则以实现其意图,我认为这是明确的,即使该准则无效。

    <?php
    // Custom function to compile post icons legend table - added by you 18 Dec 2017
    function compile_post_icons_legend_table() {
        return'<div class="narrowed">
        <h2 class="right-widget-title">Post Icons Legend</h2>
        <table class="post-icons-legend">';
    
        $terms = get_terms([
            'taxonomy' => 'std_or_youtube',
            'hide_empty' => false,
        ]);
        foreach ( $terms as $term ) {
            return '<tr><td><div class="small-svg-icon-container"><svg><use width = "24" height ="24" xlink:href="https://www.ashenglowgaming.com/wp-content/plugins/wp-svg-spritemap-master/defs.svg#:'.$term->slug.'"></svg></div></td><td>'.$term->description.'</td></tr>';
    }
    
        $terms = get_terms([
            'taxonomy' => 'content',
            'hide_empty' => false,
        ]);
        foreach ( $terms as $term ) {
            return '<tr><td><div class="small-svg-icon-container"><svg><use width = "24" height ="24" xlink:href="https://www.ashenglowgaming.com/wp-content/plugins/wp-svg-spritemap-master/defs.svg#:'.$term->slug.'"></svg></div></td><td>'.$term->description.'</td></tr>';
    }
        return
        '</table>
        </div>';
    }
    add_shortcode('post_icons_legend_table', 'compile_post_icons_legend_table');
    ?>
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Michael Berkowski    7 年前

    我知道你在这里想干什么。而不是 return 在每个步骤中(您发现这些步骤不能正常工作),您应该创建一个名为 $output = ""; ,然后代替每个 回来 ,使用 .= 类操作员 $output .= '< new stuff ...>';

    最后,在函数末尾 return $output; 返回您构建的HTML的完整字符串。

    function compile_post_icons_legend_table() {
       // Initialize a variable to build your output string
       $output = "";
    
       // Its starting value...
       $output = '<div class="narrowed">
        <h2 class="right-widget-title">Post Icons Legend</h2>
        <table class="post-icons-legend">';
    
        $terms = get_terms([
            'taxonomy' => 'std_or_youtube',
            'hide_empty' => false,
        ]);
    
        foreach ( $terms as $term ) {
            // Add to the string rather than return it
            $output .= '<tr><td><div class="small-svg-icon-container"><svg><use width = "24" height ="24" xlink:href="https://www.ashenglowgaming.com/wp-content/plugins/wp-svg-spritemap-master/defs.svg#:'.$term->slug.'"></svg></div></td><td>'.$term->description.'</td></tr>';
        }
    
        $terms = get_terms([
            'taxonomy' => 'content',
            'hide_empty' => false,
        ]);
    
        foreach ( $terms as $term ) {
            // Again, add to it rather than return
            $output .= '<tr><td><div class="small-svg-icon-container"><svg><use width = "24" height ="24" xlink:href="https://www.ashenglowgaming.com/wp-content/plugins/wp-svg-spritemap-master/defs.svg#:'.$term->slug.'"></svg></div></td><td>'.$term->description.'</td></tr>';
        }
        // Final closing html tags appended...
        $ouptut .= '
          </table>
        </div>';
    
        // Finally, return the whole HTML string you've built
        return $output;
    }