Formatierung der WP-eigenen Tagcloud (WP 2.6)

  • Hallo zusammen!

    Ich habe ein Problem mit der WP-eigenen Tagcloud-Funktionalität (wp_tag_cloud): Die Schriftgrößen der einzelnen Tags lassen sich nicht wie gewünscht formatieren. Die Wörter werden trotz unterschiedlicher Stylesheet-Angaben bis auf wenige Ausnahmen alle gleich groß dargestellt, egal welche Maßeinheit ich angebe (siehe hier unten in der Sidebar).

    Ich habe die Suchfunktion hier gequält und wie bei einem anderen User einen CSS-Konflikt und somit den Fehler meinerseits vermutet, aber nach einigem Herumgeteste mit Firebug u.ä. habe ich die Ursache gefunden:
    Offensichtlich werden die Stylesheet-Angaben nur dann korrekt interpretiert, wenn die Größenangabe, die die Tagcloud-Funktionalität auf Grund der Häufigkeit des entsprechenden Tags ausspuckt, zufällig einer ganzen Zahl entspricht. Das ist bei mir in allen Browsern so (IE 7, Firefox 3.x, Opera 9.5x und Windows XP). Ich habe die Seite mal lokal gespeichert und alle CSS-Größenangaben bei den Tags auf ganze Zahlen abgerundet und dann funktioniert auch die unterschiedliche Darstellung in allen Browsern einwandfrei. Das Gleiche passiert, wenn ich das Komma (!) in der Dezimalzahl einfach durch einen Punkt ersetze.

    Mich wundert, dass anscheinend niemand anderes das Problem hat. Oder war ich der einzige Depp, der voreilig von Simple Tagging und Konsorten auf die WP-eigene Tagging-Funktionalität umgestiegen ist? ;) Oder gibt's einen Trick, das Problem zu lösen? Ich sehe bei der Funktion wp_tag_cloud keine Möglichkeit, die Ausgabe dahingehend zu beeinflussen.

    Ich möchte eigentlich nicht wieder auf ein Plugin zurückgreifen. Weiss jemand, in welcher Datei die Berechnung der Größenangaben für die Tagcloud zu finden ist? Ich fummel zwar nicht gerne an WP-Dateien herum, aber eigentlich dürfte es ja nicht allzu schwer sein, das Ganze so abzuändern, dass die Tagcloud nur ganze Zahlen ausgibt bzw. einen Punkt statt Komma als Dezimaltrennzeichen.

    Einmal editiert, zuletzt von Schattendings (28. August 2008 um 16:01)

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Hab auch grad mal hierhin geguckt.

    Kopier doch mal bitte den Template Tag mit allen Attributen und die entsprechenden CSS-Anweisungen hier rein.

    Die Größengeschichte schreibt WP nämlich eigentlich direkt in die "style"-Attribute der Tags, und zwar in Prozent. Bei Dir haben aber nur die wenigsten Tags so eine Prozentangabe... :?

  • Gucken wir das gleiche Blog an? ;) Wenn ich bei mir auf der Startseite in den Quelltext gucke, haben alle Tags der Tagcloud in der rechten Spalte ein Stylesheet-Attribut der Art

    Code
    style='font-size: 141,32075471698%;'


    und zwar ausnahmslos alle mit Prozentzeichen und fast alle als Dezimalzahl mit einer Menge Nachkommastellen und eben leider mit Komma als Dezimaltrennzeichen - bis eben auf ein paar wenige Ausnahmen wie beim Tag "blog" oder "gothic", die dann auch korrekt dargestellt werden.

    Aufgerufen wird die Tagcloud in der Sidebar bei mir derzeit mit

    PHP
    <?php wp_tag_cloud('smallest=70&largest=700&unit=%&number=70'); ?>


    aber wie gesagt, ich habe auch alle anderen Maßeinheiten durch, es passiert immer das Gleiche.

    Das Stylesheet ist's mit Sicherheit nicht. Ich habe alle Angaben nacheinander mit Firebug ausgeknipst, da verändert sich nix. Ich habe es sogar schon mit verschiedenen Themes (unter anderem eines ohne jegliche Schriftgrößenangabe irgendwo) getestet. Und wenn ich die Seite lokal statisch abspeichere und die Zahlen in den Stylesheet-Attributen der einzelnen Tags durch ganze Zahlen ersetze oder auch nur das jeweilige Komma durch einen Punkt, dann wird alles so dargestellt, wie es sein soll.

    Wenn ich wp_tag_cloud dazu bringen kann, die Größenangaben dementsprechend auszuspucken, wäre alles gut.

  • versuch's mal mit einer anderen unit. In der deutschen Doku sieht das template tag wohl % nicht vor: Template Tags/wp tag cloud − WordDoku
    Hab's selber noch nicht getestet.

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • Das Problem liegt hier wohl eher daran, dass die deutschen Formatierungen (',' statt '.') verwendet werden, das hat Schattendings ja richtig erkannt. Das Problem dürfte irgendwo bei der Lokalisierung liegen. Die Frage ist, warum werden diese Angaben lokalisiert?

    Nachtrag: eventuell könnte man das Problem durch einen Filter ('wp_tag_cloud') umgehen. Ist aber nur eine Notlösung. Ich sehe das Problem aber auf den 1. Blick auf den Core-Code auch nicht...
    (category-template.php:340 bzw :369)

  • maxe: Wie ich schon schrieb, habe ich auch bereits alle anderen Maßeinheiten durchprobiert. Es passiert immer das Gleiche.

    marX: Danke, Du verstehst mich! :)
    Warum das so ist, würde ich auch gerne wissen. Offensichtlich ist das nicht bei jedem so. - Was auch erklären würde, warum hier kein Aufschrei durchs Forum gegangen ist. Das gibt gleichzeitig Hoffnung. ;) Habe ich vielleicht bei der Erstellung der Templates einen Fehler gemacht?

  • Ich denke nicht, dass der Fehler bei dir zu suchen ist. Wie gesagt, ich tippe auf eine Lokalisierungsproblem. Nur wird der Link selbst eigentlich nicht lokalisiert. Hier mal der entsprechende Code:

    Code
    $a[] = "<a href='$tag_link' class='tag-link-$tag_id' title='" . attribute_escape( sprintf( __ngettext('%d topic','%d topics',$count), $count ) ) . "'$rel [COLOR="Red"]style='font-size: " .
    			( $smallest + ( ( $count - $min_count ) * $font_step ) )[/COLOR]
    			. "$unit;'>$tag</a>";

    Default-Filter auf wp_tag_cloud und wp_generate_tag_cloud gibts auch nicht. D.h. ich sehe das Problem hier nicht.

    Möglicherweise ist dein PHP so eingestellt, dass alle Ausgaben "korrekt" lokalisiert werden. Aber ich kenne mich mit Lokalisierungen zuwenig aus, um dir da vernünftig weiterhelfen zu können. ;-)

    Wie gesagt, ich würde einfach quick & dirty einen Filter auf wp_tag_cloud/wp_generate_tag_cloud ansetzen, der das ','wieder in einen '.' umschreibt...


  • Wie gesagt, ich würde einfach quick & dirty einen Filter auf wp_tag_cloud/wp_generate_tag_cloud ansetzen, der das ','wieder in einen '.' umschreibt...


    Ich habe zwar schon so einiges mit WP veranstaltet, aber das noch nicht. ;) Hört sich eigentlich nicht sehr schwierig an, aber so spontan wüsste ich trotzdem nicht, wie ich das machen müsste...

  • Ganz quick & dirty (und ungetestet :-)):

    PHP
    function repair_tag_cloud_styles( $tagcloud ) {
      return preg_replace('~(\d),(\d)~', '$1.$2', $tagcloud);
    }
    add_filter('wp_generate_tag_cloud', 'repair_tag_cloud_styles');

    Entweder in die functions.php des Themes, oder ein Plugin draus basteln.

  • Ok, ich konnte es gerade doch noch schnell testen. Ich hab's in die functions.php des Themes gepackt - es funktioniert! :D Endlich ist alles so formatiert, wie es sein soll. Nochmals vielen lieben Dank!! :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!