如何回显函数返回的数组

时间:2015-05-06 作者:Varun Kumar

我试图使用do\\u shortcode()显示数组返回的项目列表。问题是我必须将echo语句与do\\u shortcode一起使用,而在我的函数中,我必须使用foreach循环来准备我希望使用do\\u shortcode()显示的项目数组。

这是代码

<?php echo do_shortcode(\'[su_accordion]\' . hsj_accordion($slugs) . \'[/su_accordion]\'); ?>

<?php function hsj_accordion($slugs) {
    foreach($slugs as $slug ) {
        echo do_shortcode(\'[su_spoiler title="\' . $slug . \'"]\' . hsj_product_list($slug) . \'[/su_spoiler]\');
    }
} ?>

<?php function hsj_product_list( $slug ) {
                        $args = array(
                            \'post_type\' => \'product\',
                            \'tax_query\' => array(
                            \'relation\' => \'AND\',
                                array(
                                    \'taxonomy\' => \'product_cat\',
                                    \'field\' => \'slug\',
                                    \'terms\' => $slug
                                ) 
                            )
                        );

                        $products = get_posts( $args );

                        $product_list[] = array();

                        foreach( $products as $post ) {
                            $product = wc_get_product( $post );
                            echo $product->get_title();
                        }
                    } ?>

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

不能从短代码内返回数组,这将导致以下错误

数组到字符串的转换。。。。。

短代码的输出必须是字符串,因此需要将数组转换为字符串。您也不能在短代码内回显任何内容,也不能在回显其输出的短代码内使用函数或模板标记。在少数情况下,您没有选择余地,可以使用输出缓冲,但这应该是您最后的选择

要从函数中正确创建一个短代码,您必须执行以下操作:(警告:未测试,并且只能从演示中使用)

add_shortcode( \'my_shortcode\', \'hsj_product_list\' );

function hsj_product_list( $atts )
{

$attributes = shortcode_atts(
    array(
        \'slug\' => \'\',
    ),
    $atts,
    \'my_shortcode\'
);

$args = array(
    \'post_type\' => \'product\',
    \'tax_query\' => array(
        \'relation\' => \'AND\',
        array(
            \'taxonomy\' => \'product_cat\',
            \'field\' => \'slug\',
            \'terms\' => $attributes[\'slug\']
        ) 
    )
);

$products = get_posts( $args );

$output = \'\';

if ( $products ) {

    foreach( $products as $post ) {
        $product = wc_get_product( $post );
        $output .= $product->get_title();
    }

}
return $output;
}
如您所见,我已将所需的所有值连接到一个字符串中,该字符串设置为变量$output. 我还通过定义$output = \'\' 在开始foreach循环之前

您可以按如下方式使用它

[my_shortcode slug=\'my-slug\']
一些注意事项,您需要清理和验证用户输入,在本例中,是传递给slug

如果您要使用do_shortcode, 那么你就不需要短代码了。然后简单地使用该函数并对该函数进行必要的更改。这将更快,因为需要首先对短代码进行解析和处理,使其比仅使用自立函数更慢

在将数组值传递给foreach 环如果传递了空值,这将导致PHP警告(错误)。我已经在上面的代码中这样做了,所以一定要查看它

上述只是一个短码的基础,您应该根据需要对其进行扩展、修改和滥用,以满足您的需要

结束

相关推荐

Multiple level shortcodes

我正在开发一个插件,遇到了一种情况,我希望有人能帮我找到一个解决方案。我想要一个短代码结构,如:[shortcode_1] [shortcode_2] [shortcode_3] [shortcode_4][/shortcode_4] [/shortcode_3] [/shortcode_2] [/shortcode_1] 但如果我使用add\\u短代码,只有第一个短代码有效。。。有没有办法得到这样的短代码结构?谢谢