簡體   English   中英

計算嵌套的簡碼,然后為下一個父簡碼重置

[英]Count nested shortcodes, then reset for next parent shortcode

一個有趣的問題讓我感到困惑,所以我知道如何使用 static 計數器計算在頁面上調用短代碼的次數。 但是,我想在調用父簡碼時重置計數器:

<?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]成為 object 並在<div>關閉后重置$count這可能有效,但我想知道是否有更好的方法?

我的想法:

<?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");?>

好的,所以我認真地考慮了這一點,解決方案非常簡單並且接近我的建議。

只需全局定義$count並在[gw-row]短代碼中將其設置為 0。 這將在每次調用時重置它:

<?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");?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM