Verifică dacă sidebar-ul înregistrat este activ și are conținut widget

17 oct. 2012, 13:38:18
Vizualizări: 22.9K
Voturi: 7

Aș dori să verific dacă un sidebar înregistrat are conținut widget - dar nu pot găsi o funcție WP pentru asta - is_active_widget verifică dacă are conținut, dar nu dacă există sau nu.

function ql_widget( $widget, $widget_name, $element = 'sider' ){

    if ( $widget ) { // s-a transmis numele widget-ului ##

        // verifică dacă widget-ul este activ - returnează html și conținutul widget-ului dacă este adevărat ##
        if ( is_active_sidebar( $widget ) ) { 

        echo '
        <div class="'.$element.'">';

            dynamic_sidebar( $widget );

         echo '</div>';

        } else {

            // afișează eroare dacă widget-ul solicitat nu există sau este gol ##
            if ( ql_user_is_administator() ) { // utilizatorul este admin ##

                if ( dynamic_sidebar( $widget ) ) { // gol ##

                    $message = 'gol';

                } else { // ID-ul sau numele widget-ului este greșit ##

                    $message = 'eroare';

                }

?>
                <div class="error"><strong>Widget <?php echo $message; ?>:</strong> 
                <?php echo $widget_name ? $widget_name : $widget ; ?></div>
<?php 


            }
        }
    }
}

Apelez această funcție în pagină folosind:

// încarcă widget ##
// widget_id, numele widget-ului, clasa elementului container ##
ql_widget( 'sidebar-general', 'Sidebar Standard', 'sider' );

Sidebar-urile sunt înregistrate corect cu register_sidebar() și au un ID unic atribuit fiecăruia.

În prezent, această funcție returnează eroarea către administrator dacă widget-ul lipsește sau este gol - aș dori să pot personaliza eroarea pentru a indica dacă lipsește sau este gol

Mulțumesc!

ACTUALIZARE aici este funcția care funcționează: link către pastebin

0
Toate răspunsurile la întrebare 3
1
10

Puteți verifica dacă o bară laterală este activă și în uz (conține widget-uri cu conținut) folosind is_active_sidebar, iată un exemplu...

if ( is_active_sidebar( $sidebar ) ) {
    // Afișează un text
} else {
    // Nu afișa nimic
};

Unde $sidebar este fie numele, ID-ul sau numărul barei laterale pe care doriți să o verificați.

Actualizare:

Iată o sugestie pentru îmbunătățirea lizibilității funcției dvs.,

function ql_widget( $widget, $widget_name, $element = 'sider' ){

    if ( $widget ) { 

        $message = (ql_user_is_administator() ? 'gol' : 'eroare');
        $widget_name = ($widget_name ? $widget_name : $widget);

        if ( is_active_sidebar( $widget ) ) { 

            $html  = '<div class="'.$element.'">';
            $html .= dynamic_sidebar( $widget );
            $html .= '</div>';
            echo $html;

        } else {

            $html  = '<div class="error"><strong>Widget ';
            $html .= $message;
            $html .= '</strong> ';
            $html .= $widget_name;
            $html .= '</div>';
            echo $html;

        }
    }
} // Acesta este sfârșitul funcției

Și dacă doriți ca mesajul de eroare să apară doar pentru administrator, atunci înfășurați conținutul interior al instrucțiunii else cu o altă condițională sau schimbați else în elseif și efectuați verificarea pentru un administrator și, opțional, finalizați cu o condiție else pentru a acoperi toate celelalte rezultate, cum ar fi pentru utilizatorii obișnuiți. Referință Codex: http://codex.wordpress.org/Function_Reference/is_active_sidebar

17 oct. 2012 14:26:06
Comentarii

mulțumesc - deja folosesc acea funcție - vreau să afișez bara laterală dacă are widget-uri, să returnez o eroare dacă numele barei laterale este greșit și să nu fac nimic dacă numele este corect dar bara este goală.

Q Studio Q Studio
17 oct. 2012 14:45:20
3

wp_get_sidebars_widgets(); va returna o listă cu toate sidebarele și widget-urile din fiecare dintre ele. Acest lucru vă permite să verificați dacă există sidebare fără widget-uri.

17 oct. 2012 13:58:37
Comentarii

bingo! - voi actualiza răspunsul pentru a arăta soluția pe care am folosit-o - mulțumesc

Q Studio Q Studio
17 oct. 2012 14:50:45

Nu este asta pentru ce este is_dynamic_sidebar?

Adam Adam
17 oct. 2012 15:04:11

acest lucru mi-a permis să verific toate cele 3 stări - nume greșit, gol, afișează-l dacă totul este în regulă...

Q Studio Q Studio
19 oct. 2012 13:51:44
0

Bazat pe răspunsul acceptat, am rezolvat problema mea cu această funcție, sper să vă ajute și mulțumesc, Mridul Aggarwal.

function is_active_sidebar_with_content( $sidebar ) {

   $sidebars = wp_get_sidebars_widgets();

   if ( isset( $sidebars[ $sidebar ] ) && ! empty( $sidebars[ $sidebar] ) ) {
       return true;
   }


   return false;
}
27 aug. 2021 23:26:26