Мне интересно, есть ли более эффективный способ написать это, используя цикл while или что-то еще. По сути, я хочу динамически генерировать несколько коротких кодов WordPress.
# Span 1 add_shortcode('span-1', 'span1'); function span1($atts, $content = null) { return generateSpan(1, $content); } # Span 2 add_shortcode('span-2', 'span2'); function span2($atts, $content = null) { return generateSpan(2, $content); } // ... repeating as many times as necessary
Я пробовал это, но он, похоже, не работал:
$i = 1; while ($i < 12) { $functionName = 'span' . $i; $shortcodeName = 'span-' . $i; add_shortcode($shortcodeName, $functionName); $$functionName = function($atts, $content = null) { return generateSpan($i, $content); }; $i++; }
Я знаю, что он не отвечает на «динамически генерирующую» проблему, но, альтернативно, вы можете использовать для этого атрибуты: [span cols="1"]
-> [span cols="12"]
.
add_shortcode('span', 'span_shortcode'); function span_shortcode( $atts, $content = null ) { if( isset( $atts['cols'] ) ) { return generateSpan( $atts['cols'], $content ); } }
И третий параметр обратного вызова можно использовать для обнаружения текущего короткого кода:
for( $i=1; $i<13; $i++ ) add_shortcode( "span-$i", 'span_so_17473011' ); function span_so_17473011( $atts, $content = null, $shortcode ) { $current = str_replace( 'span-', '', $shortcode ); // Will get $i value return generateSpan( $current, $content ); }
Ссылка: current_shortcode () – обнаружение используемого в настоящее время короткого кода
Вы должны быть в состоянии сделать это:
<?php $scName = 'span-'; for($i = 0; $i < 12; $i++) { add_shortcode($scName . $i, function($atts, $content = null){ return generateSpan($i, $content); }); } ?>