返回数据而不是回显/打印

时间:2021-12-17 作者:Mason

WordPress(和PHP)新手,我正在尝试让这个PHP代码段与代码段插件配合使用,这样我就可以在帖子中显示所有媒体附件。它正在工作,因为它现在将附件显示为帖子上的缩略图,但由于使用了print\\r功能,它们出现在页面顶部,而不是放置快捷码的位置。我知道要解决这个问题,必须使用return语句,但我不知道如何正确返回数据。如果我使用return语句,它只会将文本“Array”打印到页面上。是否有人可以帮助我了解如何调整此功能,以便此功能返回显示媒体所需的数据?我假设每个附件都必须添加到一个数组中,然后打印该数组的内容,但我不知道怎么做。谢谢

function get_media () {
    $attachments = get_posts( array(
            \'post_type\'   => \'attachment\',
            \'numberposts\' => -1,
            \'post_status\' => null,
            \'post_parent\' => get_the_ID()
        ) );
 foreach ( $attachments as $attachment ) {
               print_r(wp_get_attachment_image( $attachment->ID, \'thumbnail\' ));
            }
}

add_shortcode( \'media\', \'get_media\' ) ;

1 个回复
SO网友:Alexander Holsgrove

正如您所提到的,您的代码存在的问题是,您通过print_r 函数,而您需要构建一个字符串来返回,该字符串将显示在短代码的位置。

尝试一下:

function get_media () {
    $attachments = get_posts([
            \'post_type\'   => \'attachment\',
            \'numberposts\' => -1,
            \'post_status\' => null,
            \'post_parent\' => get_the_ID()
    ]);
    
    if ($attachments) {
        foreach ($attachments as $attachment) {
            $output .= wp_get_attachment_image($attachment->ID);
        }
    }

    return $output;
}

add_shortcode( \'media\', \'get_media\' ) ;