是的,问题是它行不通。
shortcode系统不知道将传递多少个参数,因此它会给您一个数组$atts
包含属性的。如果只有一个元素,那么数组将只有一个元素。如果未传递任何参数,数组将为空。
检查official documentation for a proper example:
<?php
function wporg_shortcode($atts = [], $content = null, $tag = \'\')
{
// normalize attribute keys, lowercase
$atts = array_change_key_case((array)$atts, CASE_LOWER);
// override default attributes with user attributes
$wporg_atts = shortcode_atts([
\'title\' => \'WordPress.org\',
], $atts, $tag);
// [...]
// return output
return $o;
}
function wporg_shortcodes_init()
{
add_shortcode(\'wporg\', \'wporg_shortcode\');
}
add_action(\'init\', \'wporg_shortcodes_init\');
代码越长并不意味着代码越差。
在这种情况下,我想说的是相反的情况:如果您使用该数组以及它的所有用途,那么将来很容易扩展您的短代码,继续使用它,其他开发人员将更好地理解您的代码。
考虑到这一点,你可以这样写你的短代码
function bg_comparison_points_shortcode($atts = [], $content = null, $tag = \'\')
{
// normalize attribute keys, lowercase
$atts = array_change_key_case((array)$atts, CASE_LOWER);
// override default attributes with user attributes
$comparison_points_atts = shortcode_atts([
\'custom_field\' => \'\',
], $atts, $tag);
return bg_calculate_points( $comparison_points_atts[\'custom_field\'] );
}
function bg_comparison_points_init()
{
add_shortcode(\'comparison_points\', \'bg_comparison_points_shortcode\');
}
add_action(\'init\', \'bg_comparison_points_init\');