it-swarm.com.de

Hinzufügen von Klassen zur dynamischen Seitenleiste

Hey, ich versuche, diese Bedingung zu erstellen, die automatisch ein Rasterlayout erstellt, wenn Widgets/Sidebars hinzugefügt und entfernt werden. Das Ziel ist es, den Benutzer so viele Widgets wie möglich einfügen zu lassen, ohne sich um das Layout zu kümmern. Dies ist mein Code, lassen Sie es mich wissen, wenn Sie möchten, dass ich mich weiter erkläre:

if (function_exists('create_widget') && dynamic_sidebar('sidebar-1') && dynamic_sidebar('sidebar-2') && dynamic_sidebar('sidebar-3') ) {
            $layout_classes = "col-md-4";
    }       elseif ( is_active_sidebar( 'sidebar-1' ) && is_active_sidebar( 'sidebar-2' ) ) {
                $layout_classes = "col-md-6";
    } else {
            $layout_classes = "col-md-2";
    }

<div class="row"
    <div class="container">
        <div class="col-md-12">
        <div class="<?php echo $layout_classes ?>">

                                <?php dynamic_sidebar( 'sidebar-1'); ?>

                                    <?php dynamic_sidebar( 'sidebar-2'); ?>

                                        <?php dynamic_sidebar( 'sidebar-3'); ?>

</div>
</div>
</div>
</div><!--End Layout Class-->

P.S. Verwenden von Bootstrap 3.

2
Carl Sergile

Sie haben nicht gesagt, was das Problem ist. Aber ich kann eine für den Anfang sehen - dynamic_sidebar in Ihren if Bedingungen wird die Widgets sofort wiedergeben. Wenn Sie möchten, dass check eine Seitenleiste Widgets enthält, verwenden Sie is_active_sidebar :

is_active_sidebar( 'sidebar-1' ); // True/false
1
TheDeadMedic

Es gibt eine Antwort hier , die sich jedoch auf wp_get_sidebars_widgets stützt, die nicht nur privat, sondern auch wertgemindert ist.

Dieser Code sieht aus wie eine bessere und robustere Lösung:

Es ist eigentlich ziemlich einfach. Ich habe es verwendet, um meinem Widget Klassen für PureCSS framework hinzuzufügen.

In diesem Fall soll der äußere Container die Klasse pure-g für das "Gitter" haben. Und die inneren Elemente müssen die Klasse pure-u-1-* haben, wobei der Stern die Gesamtzahl der Spalten ist, in diesem Fall die Anzahl der Widgets.

So registrieren Sie die Seitenleiste:

register_sidebar([
    'name'          => __('Footer Widget Area', 'pure-demo'),
    'id'            => 'sidebar-footer',
    'class'            => 'pure-g',
    // Next line has our callback
    'before_widget'  => '<section class="widget %2$s '. slbd_count_widgets( 'sidebar-footer' ) .'">',
    'after_widget'  => '</section>',
    'before_title'  => '<h3>',
    'after_title'   => '</h3>'
]);

Und hier ist unsere Rückruffunktion:

 function slbd_count_widgets( $sidebar_id ) {
  // If loading from front page, consult $_wp_sidebars_widgets rather than options
  // to see if wp_convert_widget_settings() has made manipulations in memory.
  global $_wp_sidebars_widgets;
  if ( empty( $_wp_sidebars_widgets ) ) :
    $_wp_sidebars_widgets = get_option( 'sidebars_widgets', array() );
  endif;

  $sidebars_widgets_count = $_wp_sidebars_widgets;

  if ( isset( $sidebars_widgets_count[ $sidebar_id ] ) ) :
    $widget_count = count( $sidebars_widgets_count[ $sidebar_id ] );
    $widget_classes = '';
    $widget_classes .= 'pure-u-1 pure-u-sm-1-1';
    $widget_classes .= ' pure-u-md-1-' . ceil($widget_count / 2);
    $widget_classes .= ' pure-u-lg-1-' . $widget_count;
    return $widget_classes;
  endif;
}

Dann zeige ich es so an:

<footer class="content-info pure-g">
  <?php if ( is_active_sidebar( 'sidebar-footer' ) ) : ?>
      <?php dynamic_sidebar( 'sidebar-footer' ); ?>
  <?php endif; ?>
  <div id="colophon" class="site-footer" role="contentinfo">
  <?php
    if ( has_nav_menu( 'footer_links' ) ) :
       wp_nav_menu(['theme_location' => 'footer_links', 'container_class' => 'pure-menu', 'menu_class' => 'pure-menu-list']);
    endif;
  ?>
  </div>
</footer>
0
MikeiLL