不能从短代码内返回数组,这将导致以下错误
数组到字符串的转换。。。。。
短代码的输出必须是字符串,因此需要将数组转换为字符串。您也不能在短代码内回显任何内容,也不能在回显其输出的短代码内使用函数或模板标记。在少数情况下,您没有选择余地,可以使用输出缓冲,但这应该是您最后的选择
要从函数中正确创建一个短代码,您必须执行以下操作:(警告:未测试,并且只能从演示中使用)
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警告(错误)。我已经在上面的代码中这样做了,所以一定要查看它
上述只是一个短码的基础,您应该根据需要对其进行扩展、修改和滥用,以满足您的需要