Подсчитайте вложенные шорткоды, затем сбросьте их для следующего родительского шорткода - PullRequest
1 голос
/ 18 июня 2020

Немного интересный вопрос, который меня озадачивает, поэтому я знаю, как подсчитать, сколько раз шорткод вызывается на странице, используя счетчик stati c. Однако я хочу сбрасывать счетчик всякий раз, когда вызывается родительский шорткод:

<?php function gw_row($atts, $content = null) {
    return '<div class="gw-row">'.do_shortcode($content).'</div>'; 
} add_shortcode("gw-row", "gw_row");

function gw_column($atts, $content = null) {
    static $count = 0; $count++; if($count > 5){$count = 0}
    return '<div class="column">'.do_shortcode( $content ).'</div>';
} add_shortcode("gw-column", "gw_column");?>

Итак, объясняя это далее, на странице будет несколько шорткодов [gw-row], это «Родительский шорткод». В этом шорткоде я использую [gw-column]. Я хочу подсчитать, сколько столбцов используется на странице в каждом родительском шорткоде.

Пример:

[gw-row]
    [gw-column]$Count = 1[/gw-column]
    [gw-column]$Count = 2[/gw-column]
[/gw-row]
               Reset $count
[gw-row]
    [gw-column]$Count = 1[/gw-column]
    [gw-column]$Count = 2[/gw-column]
    [gw-column]$Count = 3[/gw-column]
[/gw-row]
               Reset $count

Я думал о создании [gw-row] объект и сброс $count сразу после закрытия <div>, что может сработать, но мне интересно, есть ли способ лучше?

Мои мысли:

<?php function gw_row($atts, $content = null) {
    global $count;
    ob_start();?>
        <div class="gw-row">
            <?php do_shortcode($content);?>
        </div><?php $count = 0;?>
    <?php return ob_clean();
} add_shortcode("gw-row", "gw_row");

function gw_column($atts, $content = null) {
    $count++; if($count > 5){$count = 0}
    return '<div class="column">'.do_shortcode( $content ).'</div>';
} add_shortcode("gw-column", "gw_column");?>

1 Ответ

0 голосов
/ 18 июня 2020

Хорошо, поэтому я серьезно над этим подумал, решение довольно простое и близко к тому, что я предложил.

Просто определите $count глобально и установите для него значение 0 в шорткоде [gw-row]. Это будет сбрасывать его каждый раз, когда он вызывается:

<?php function gw_row($atts, $content = null) {
    global $count; $count = 0;
    return '<div class="gw-row">'.do_shortcode($content).'</div>'; 
} add_shortcode("gw-row", "gw_row");

function gw_column($atts, $content = null) {
    global $count; $count++; if($count > 5){$count = 0}
    return '<div class="column">'.do_shortcode( $content ).'</div>';
} add_shortcode("gw-column", "gw_column");?>
...