Alt-Tags von Bildern auslesen?

  • Hallo liebes Forum :)

    Ich habe mich gestern schon beinah wund gesucht, ohne etwas zu finden.
    Mein Problem sieht folgendermaßen aus:

    Ich nutze Wordpress 3.3.1 in verbindung mit dem Theme "Genova". Das Theme bietet eine tolle Bilder-Slideshow an, die für den Zweck, zu dem ich Wordpress nutze (als CMS für eine Galerie-Website: http://www.galerie-hans-tepe.de ), in unseren Augen gut geeignet ist.
    Leider erlaubt es mir das Theme nicht, die alt-tags der Bilder, die ja über die Wordpress-Mediathek bestimmt werden können, dort auch zur Wirkung kommen zu lassen. Das Theme bestimmt die Alt-tags der Bilder bei einer Slideshow selbst. Die Stelle im Theme habe ich bereits gefunden, die dafür verantwortlich ist. Dort steht an der Stelle (theme-functions.php), an der die Slideshow stehen soll:

    Code
    else if ($slider == "on") {
            $sliderImg = str_replace(" ", "", $sliderImg);
            $sliderImg = explode(",", $sliderImg);
            for ($i = 0; $i < count($sliderImg); $i++) {
                if ($sliderImg[$i] != "") {
                    $html .= '<img src="'.$sliderImg[$i].'" alt="'.$post->post_title.' ['.($i + 1).']" />';
                }

    Meine grandiose Idee: das

    Code
    alt="'.$post->post_title.' ['.($i + 1).']"

    einfach entsprechend ersetzen, sodass dort der alt-tag des jeweiligen Bildes ausgelesen wird, der jeweils in der Mediathek als Alternativtext angegeben werden kann.
    Leider habe ich keine Ahnung, wie ich das so mache, dass es hinterher auch funktioniert - geschweigedenn, wie ich an diesen Alt-text herankomme...?
    Ich hoffe, die zahlreich vorhandenen Fachgenies hier können mir da helfen ;)

    Vielen Dank für eure Hilfe! :)

    • 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

  • Ja, das geht mit der Funktion get_post_meta. Ich würde es so machen:

    PHP
    if ($sliderImg[$i] != "") {
        $alt_text = get_post_meta( $post->ID, '_wp_attachment_image_alt', true );
        if( !$alt_text ) // Falls der Alt-Text leer ist, dann doch den Titel nehmen
            $alt_text = $post->post_title;
        $html .= '<img src="'.$sliderImg[$i].'" alt="'.$alt_text.' ['.($i + 1).']" />';
    }

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Hallo Ingo! :)

    Ich habe die Änderungen nun soweit vorgenommen - leider hat sich nichts getan. Die Alt-Texte werden immer noch durch den Posttitel und eine fortlaufende Nummer gebildet. Dass der alte Code weg ist, scheint da auch nicht zu stören.
    Klingt für mich sehr nach einer Cache-Sache. ..Wenn ich mich jetzt mal ganz weit aus dem Fenster lehnen darf.
    Aber wie leere ich den Cache in Wordpress? Wenn Wordpress denn überhaupt Caches nutzt? Ich hab keine Ahnung. Ich hatte nur Zwei Jahre Informatik Grundkurs mit 0-2 Punkten *g*

    Also was nun?

    Dennoch schonmal vielen vielen Dank für deine Hilfe! :) Alleine wäre ich aufgeschmissen.

    Gruß,
    Nicola

  • Hmm, probiere mal das:

    PHP
    if ($sliderImg[$i] != "") {
        $alt_text = get_post_meta( $post->ID, '_wp_attachment_image_alt', true );
        if( '' == $alt_text ) // Falls der Alt-Text leer ist, dann doch den Titel nehmen
            $alt_text = $post->post_title;
        $html .= '<img src="'.$sliderImg[$i].'" alt="'.$alt_text.'" />';
    }

    Die Nummer soll ja auch weg, oder?

    Am Cache wird es nicht liegen, war eher ein Fehler von mir. :-)

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Neee, das wird wohl so immer noch nicht gehen. $post bezieht sich ja auf den Artikel oder die Seite, wo die Bilder enthalten sind. Damit kommt man nicht an die Alt-Texte der Bilder ran. Man müßte viel weiter vorne ansetzen, da wo die Bilderliste zusammengestellt wird. Das ist in Deinem Code-Schnipsle aber nicht zu sehen.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Ohje. Das klingt aber nicht sonderlich gut oder einfach. Was genau brauchst du? Bin leider komplette Laien-Braut!
    Ich kopiere dir aber nichts desto trotz mal alles, was meiner Meinung nach alles mit dem Slider zu tun hat (und vielleicht noch ein wenig mehr...). Wenn's dann immer noch nicht reicht, kann ich dir auch gleich diese gesamte theme-functions.php kopieren.

    Ich geb dir hier einfach mal die gesamte php-datei:

    Und immer noch vielen vielen lieben Dank für deine Mühen! :)

  • Sieht schlecht aus. Die Bilder werden wohl nur in einer einfachen, kommaseparierten Liste gespeichert. Da kommt man nur auf Umwegen an die Metadaten ran. So könnte es gehen:

    - am Anfang, da wo global $post; steht noch $wpdb hinzufügen also:

    PHP
    function get_image ($echo = true) {
        global $post,$wpdb;
        ...

    - und dann der Block, den wir schon hatten, wie folgt:

    PHP
    if ($sliderImg[$i] != "") {
        $img_id = (int)$wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE guid = '{$sliderImg[$i]}' AND post_type = 'attachment'" );
        $alt_text = get_post_meta( $img_id, '_wp_attachment_image_alt', true );
        if( '' != $alt_text ) // Falls der Alt-Text leer ist, dann doch den Titel nehmen
            $alt_text = $post->post_title;
        $html .= '<img src="'.$sliderImg[$i].'" alt="'.$alt_text.'" />';
    }

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Richtig, die Pfade zu den Bilddateien werden in einer Liste eingetragen und durch ein Komma jeweils getrennt, wenn ich einen neuen Artikel oder eine Seite schreibe.

    Ich habe die Änderungen nun eingefügt und entsprechend ausprobiert - und es scheint nicht zu funktionieren. Im Gegenteil: nun scheinen die Alt-Texte der Bilder erst dann im Quelltext zu erscheinen, wenn diese einmal in der Slideshow dem Betrachter gezeigt wurden. Ich bin kein Experte, aber ich glaube das ist aus SEO-technischen Aspekten äusserst ungünstig.

    Das ganze scheint ein klein wenig komplizierter zu sein. Ich möchte dir beileibe nicht deine Zeit stehlen und eh du nun länger als Nötig dran hängst, das Problem zu lösen: sollte es nicht so einfach machbar sein, werden wir es überleben, wenn eben nur die Künstlernamen in den Alt-tags erscheinen, und nicht die Bildtitel. Dann muss ich die Bilddateien eben in nächster Zeit noch mit dem Ausstellungsnamen zusätzlich versehen.
    Also mach dir nun keinen Stress! ...Wollte ich mal so gesagt haben.. ist ja immerhin alles auf freiwilliger Basis :-X

    Trotz allem vielen vielen lieben Dank für deine Hilfe! :)

  • Oh Mist, ich habe noch einen Fehler drin. Der Vergleich:

    PHP
    if( '' != $alt_text ) // Falls der Alt-Text leer ist, dann doch den Titel nehmen
       $alt_text = $post->post_title;

    ist natürlich falsch. Ich setze da immer den Artikel-Titel, wenn es einen Alt-Text gibt. Ich will das aber machen, wenn der Alt-Text leer ist.

    So muß es richtig sein:

    PHP
    if( '' == $alt_text ) // Falls der Alt-Text leer ist, dann doch den Titel nehmen
       $alt_text = $post->post_title;

    Immer diese Flüchtigkeitsfehler... *tststs*


    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Es funktioniert!
    Habe es eben getestet. Es funktioniert tatsächlich!
    Das bedeutet, du bist gerade zu meinem Held geworden *g* Die Alt-Texte waren mir für die Galerie nämlich doch recht wichtig. Super, dass das nun klappt!
    Einziges kleines Problemchen: Ich habe viele Bilder seperat von den Seiten bzw Artikeln hochgeladen bzw die Alt-texte erst nachträglich eingefügt. Das scheint dem Skript nicht zu schmecken - aber wenn ich die Bilder (habe es eben getestet) erneut spezifisch zur betreffenden Seite/Artikel hochlade, klappt es einwandtfrei.
    Ich werde mir also nun nochmal ein wenig Zeit nehmen und das ganze einfach Etappenweise neu hochladen, dann klappt es alles auch.

    Vielen vielen Dank! :D Kann gar nicht genug Danke sagen.

    *tief verbeugt*

  • Freut mich, daß es funktioniert und ich helfen konnte.

    Obwohl es mich wundert, daß es bei nicht zum Artikel/Seite hochgeladenen Bildern nicht geht. Vielleicht wird dann die guid nicht gesetzt, die ich ja zum Suchen des Bildes in der Datenbank benötige. Naja, wer weiß...

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

Jetzt mitmachen!

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