it-swarm.com.de

Ändern von $ before_widget für bestimmte Widgets

Also arbeite ich daran, ein Wordpress-Theme mit vielen zusätzlichen Widgets zu entwerfen. Die, die ich hinzugefügt habe, befinden sich in separaten Dateien und werden in der functions.php aufgerufen. Ich habe viele CSS auf den Widgets selbst und die div-Klassen befinden sich in der functions.php in $ before_widget und $ after_widget etc. Mein Problem ist, dass ich für bestimmte Widgets nicht dasselbe CSS möchte, zum Beispiel keinen Hintergrund oder Rahmen. Ich kann anscheinend nicht herausfinden, wie ich das anstellen soll. Wenn das Sinn macht. Danke im Voraus!

1
iJamesPine

Es gibt zwei Möglichkeiten, separate Stile für jedes Widget zuzulassen. Die erste besteht darin, den Widgets separate Klassen wie folgt hinzuzufügen:

Erste Methode

register_sidebar(array('name'=>'sidebar1',
 'before_widget' => '<ul class="black-bg"><li>',
 'after_widget' => "</li></ul>",
 'before_title' => '<h2 class="widgettitle">',
 'after_title' => "</h2>"
  ));

Sie können dann die .back-bg-Klasse verwenden, um das Widget wie folgt zu gestalten:

#sidebar .black-bg {
background:black;
}

und ohne Rand:

register_sidebar(array('name'=>'sidebar2',
 'before_widget' => '<ul class="no-border"><li>',
 'after_widget' => "</li></ul>",
 'before_title' => '<h2 class="widgettitle">',
 'after_title' => "</h2>"
  ));

das CSS wäre zum Beispiel:

#sidebar .no-border {
border:none;
}

Die zweite Methode

Sie können auch die Designdatei verwenden, in der Sie die Seitenleiste/das Widget aufrufen. Auf diese Weise würden Sie nur dasselbe vor und nach dem Widget verwenden, aber eine Klasse oder eine ID verwenden, um die Seitenleiste wie folgt in die Vorlagendatei einzufügen:

register_sidebar(array('name'=>'sidebar1',
 'before_widget' => '<ul><li>',
 'after_widget' => "</li></ul>",
 'before_title' => '<h2 class="widgettitle">',
 'after_title' => "</h2>"
  ));
register_sidebar(array('name'=>'sidebar2',
 'before_widget' => '<ul><li>',
 'after_widget' => "</li></ul>",
 'before_title' => '<h2 class="widgettitle">',
 'after_title' => "</h2>"
  ));

Dann können Sie in whatever-themefile.php Folgendes tun:

  <div class="black-bg">
    <?php if ( function_exists ( dynamic_sidebar(1) ) ) : ?>
    <?php dynamic_sidebar (1); ?>
    <?php endif; ?>
  </div>

Der Style:

.black-bg {
background:black;
}

Und...

  <div class="no-border">
    <?php if ( function_exists ( dynamic_sidebar(2) ) ) : ?>
    <?php dynamic_sidebar (2); ?>
    <?php endif; ?>
  </div>


.no-border {
border:none;
}

Antwort auf Kommentar:

Ich nahm nur an, Sie meinten Seitenleiste. Die meisten beziehen sich auf benutzerdefinierte Seitenleisten als "Widgets". Lassen Sie es mich also noch einmal versuchen.

Ich kann mir nicht ganz vorstellen, was Sie wollen, aber jedes benutzerdefinierte Widget, das Sie registrieren, hat eine eigene Klasse. Wenn das Widget mehrmals verwendet wird, erscheint es mir nur sinnvoll, den "Ort" zu verwenden, an dem es platziert wird, um das Styling zu handhaben (das wäre die dynamische_Seitenleiste, in der es platziert ist).

Wenn Sie über das Hinzufügen eines separaten Stils zu einem einzelnen Widget sprechen, das mehr als einmal in einer bestimmten Seitenleiste platziert wird, würde ich einfach die CSS-Pseudo-Selektoren (gerade/ungerade) verwenden. Zum Beispiel:

/*EVEN*/
#sidebar .black-bg:nth-child(even) {
background:transparent;
border:none;
}

/*ODD*/
#sidebar .black-bg:nth-child(odd) {
background: black;
border:1px dotted silver;
}
3
Jeremy Jared

Darum geht es bei $before_widget. Sie würden array('before_widget' => '<span class="some-class".',after_widget' => '</span>) tun und dann .some-class nach Ihren Wünschen stylen. Sie können mehr als eine Klasse haben oder sie sogar anhand der Widgets-ID formatieren. Wenn dies nicht das ist, was Sie fragen, klären Sie bitte die Frage.

0
Brooke.