如何 return 使用 'foreach' 创建的函数的所有内容作为 PHP 中的字符串以使用 wordpress contactform 7 动态字段发送

How to return everything a function created with 'foreach' as string in PHP to send with wordpress contactform 7 dynamic field

我想用 contactform 7 动态隐藏字段 wordpress 插件发送电子邮件,以将动态内容发送到电子邮件中。 这在使用短代码时是可能的。所以我写了短代码和函数,看起来它可以工作,因为在网站上,显示了正确的输出,但它没有用邮件发送。我需要通过显示为列表的 ID 从多个帖子和自定义字段中获取内容。

当有一个简单的 return 'random text'; 时它发送正确的内容 但是它不会发送任何带有 echo 的东西,例如

那么我怎样才能以某种方式获取函数创建的内容,它是一个可以发送的简单 return

function show_list_function() {
    if(!empty($_SESSION['acts'])){
        foreach($_SESSION['acts'] as $actID){ //this gives the right content, but doesn't send with the mail
            echo get_the_title($actID); 
            the_field('lange', $actID); 
        }    
    } else {
        return 'Nothing selected'; //this is working
    }
}

add_shortcode( 'show_list', 'show_list_function' );

感谢您的帮助和提示!

简码输出无法回显,必须返回,因为 do_shortcodeecho do_shortcode()

使用

来自抄本:

Note that the function called by the shortcode should never produce an output of any kind. Shortcode functions should return the text that is to be used to replace the shortcode. Producing the output directly will lead to unexpected results.

function show_list_function() {
    // Init $output as something 
    $output = '';
    if(!empty($_SESSION['acts'])){
        foreach($_SESSION['acts'] as $actID){ //this gives the right content, but doesn't send with the mail
            // concatenate the $output string
            $output .= get_the_title($actID); 
            $output .= get_field('lange', $actID); 
        }    
    } else {
        $output = 'Nothing selected'; //this is working
    }
    return $output;
}

add_shortcode( 'show_list', 'show_list_function' );

您可以使用 ob_start() 和 ob_get_clen();

function show_list_function() {

    ob_start();

    if(!empty($_SESSION['acts'])){
        foreach($_SESSION['acts'] as $actID){ //this gives the right content, but doesn't send with the mail
            echo get_the_title($actID); 
            the_field('lange', $actID); 
        }    
    } else {
        echo 'Nothing selected'; //this is working
    }

    $html = ob_get_clean();
    return $html;
}

add_shortcode( 'show_list', 'show_list_function' );