Support » Allgemeine Fragen » Alle Bildunterschriften, Beschreibungen ausgeben

  • Hallo – ich brauche eine Liste ALLER Bildbeschreibungen. Also alles was man zB. beim Upload in die Felder eintippt – Titel, Bildunterschrift, Alternativtext, Bildbeschreibung. Am wichtigsten sind aber die im Frontend sichtbaren Angaben, also va. die Bildunterschrift.

    Diese Liste muss nicht unbedingt öffentlich sichtbar sein, dh. es würde mir vorerst auch ein SQL Statement reichen. Die Liste kann ich ja dann anderweitig weiter geben.

    Leider finde ich (nicht einmal per phpmyadmin) in der DB keine diese Angaben, nur _wp_attachment_image_alt ist in der Tabelle wp_postmeta mit den gesuchten Werten belegt. Nur kann das ja nicht alles sein? Wo findet man die anderen Angaben zum Bild?

    Oder gibts ev. eine Plugin das mir die Bilddaten als Liste zeigt? So wie die Mediathek, aber halt um diese Angaben erweitert.

    Ich hab schon vieles probiert, nichts ging – und den ganzen Tag nach ner Lösung gesucht, aber leider …

    Danke!

Ansicht von 7 Antworten - 1 bis 7 (von insgesamt 7)
  • In WordPress wird alles – hinsichtlich der Speicherung in der Datenbank – als Post betrachet. Beiträge sind Posts, Seiten sind Posts, verschiedene Revisionen von Beiträgen sind Posts, selbst hochgeladene Bilder sind Posts. Folglich kann man auch mit einer Abfrage alle Posts einer Beitragsart „attachment“ abrufen. Die Ausgabe erfolgt in einem Post-Object. Wenn du dann ein var_dump() dieses Post-Objects machst, siehst du, welche Metadaten mitgeliefert werden. Die kannst du dann in einer foreach-Schleife ausgeben.

    $query_images_args = array(
        'post_type'      => 'attachment',
        'post_mime_type' => 'image',
        'post_status'    => 'inherit',
        'posts_per_page' => - 1,
    );
    
    $query_images = new WP_Query( $query_images_args );
    
    // Das Post-Object ausgeben:
    echo '<pre>';
    var_dump( $query_images );
    echo '</pre>';
    
    foreach ($query_images as $attachment) {
     $alt = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true);
     $image_title = $attachment->post_title;
     $caption = $attachment->post_excerpt;
     $description = $image->post_content;
    
     echo 'Alternativer Text: '.$alt . '<br />;
     echo 'Titel: '.$image_title.<br />;
     echo 'Beschriftung: '.$caption.'<br />';
     echo 'Beschreibung: '.$description.'<br /><br />';
    }
    Thread-Starter pezi

    (@pezi)

    Danke das ist ja gleich eine fertige Lösung!
    Das schaut ja jetzt einfach aus, auch wenn ich nie drauf gekommen wäre.

    Aber:
    Wo, wie was mache ich mit dem Script?
    Könnte man das zB. in die functions.php des Child Themes tun, um die Sachen gleich, etwa in einer Seite, einem Beitrag auszugeben oder in eine Funktion packen und irgendwie aufrufen?

    Und stimmt es also das die gesuchten Daten in 2 Tabellen (post und postmeta) zu finden sein sollten?
    Denn dort sind sie wirklich – aber warum findet die phpmyadmin Suche gar nichts, auch wenn der Suchbegriff 100% stimmt, also wenn ich nach eindeutigen Testbegriffen suche?

    Jedenfalls Danke, ich schau jetzt mal ob ich das Script selbst zum laufen kriege

    Der Code sollte Bestandteil eines Templates sein, wobei du z.B. die Template-Hierarchie ausnutzen kannst. Soll heißen: wenn du eine Seite „Bild-Meta“ anlegst und den Code in ein Template page-bild-meta.php packst, müsste der Code automatisch ausgeführt werden, wenn du die Seite http://deinedomain.de/bild-meta/ im Browser aufrufst.

    Bei der Suche in phpMyAdmin gibt es verschiedene Möglichkeiten, mit Platzhaltern zu arbeiten. Mit dem Abfrage-Paramtere LIKE %…% findet der Suchbegriff Palmen z.B. „Sonne, Palmen und Meer“.

    Thread-Starter pezi

    (@pezi)

    Danke!
    Die SQL hab ich mir mittlerweile zusammengestellt, tun genau was ich wollte. zB. eins davon zeigt nur Sätze wo die Bild-UNTERSCHRIFT vorhanden ist:

    SELECT ID, post_content, post_title, post_status, post_excerpt, post_name, post_parent, guid, post_type
    FROM kas_wp_posts
    WHERE post_status=’inherit‘ AND post_type=’attachment‘ AND post_excerpt!=“
    ORDER BY kas_wp_posts.ID DESC

    Mit dem Script hab ich natürlich auch experimentiert, aber auch nach der kleinen Reparatur in den echo Zeilen (es fehlten bloß ein paar ‚Hochkommas‘) – geht das dennoch nicht wie gewünscht.
    Es zeigt mir (mit dem Dump (klarerweise) eine endlose Ausgabe die zwar informativ ist, die ich aber so nicht brauchen kann. Das kann man keinen zeigen und auch nicht in irgendwelche Form bringen.

    Und die Schleifen Ausgabe, die das in gut lesbarer Form bewerkstelligen sollte, ist bis auf ein Bild immer leer. Es zeigt noch dazu ein Bild an welches damit überhaupt nicht erfassen will, nämlich den obersten Werbebanner.
    Ich will ja nur die Artikelbilder erfassen.

    Wahrscheinlich mach ich etwas falsch, aber schon allein die Angaben im Script haben mir viel geholfen die richtigen Tabellen, Spalten, Felder für ein manuelles SQL zu finden.

    Danke!

    PS: Das mit den Codes in Backticks klappt hier nicht, war ein kompletter Salat, sind ja viele Backticks im SQL (gewesen – nu sind se weg)

    Thread-Starter pezi

    (@pezi)

    So geschafft!

    ich hab testweise eine manuelle Verbindung zur DB gebaut (weil ich mit den (zweifellos bequemeren) eingebauten WP Funktionen nicht auskenne)
    aber das funzt genau wie gewünscht
    Es gibt mir eine Tabelle aus welche pro Zeile ein Bild beschreibt, mit eben der Bild-Unterschrift usw. und auch den Link der in ‚guid‘ sitzt war nützlich.

    $obj_mysqli = new mysqli($dbserver, $dblogin, $dbpassword, $dbname);
    if ($obj_mysqli->connect_errno) {
    printf("Verbindungsfehler: %s\n", $obj_mysqli->connect_error);
    exit();
    }
    
    $sql = "SELECT ID, post_content, post_title, post_status, post_excerpt, post_name, post_parent, guid, post_type FROM wp_posts WHERE post_status='inherit' AND post_type='attachment' AND post_excerpt!='' ORDER BY wp_posts.ID DESC";
    
    $result=$obj_mysqli->query($sql);
    
    echo "<table border=1>";
    echo "<tr> <th><b>Bild-Unterschrift mit © Info u. Quellen</b>:</th> <th style='width:25%'>Bild-Titel: </th> <th style='width:25%'>Bild-Beschreibung: </th> <th style='width:5%'>Link</th> </tr>";
    while ($row = $result->fetch_row()) {
    echo "<tr> <td> ".utf8_encode($row[4])."</td><td>".utf8_encode($row[2])."</td><td>".utf8_encode($row[1])."</td><td>Bild</td> </tr>\n";
    }
    echo "</table>";
    $result -> close();

    PS: das ganze noch stylen und die UT8 Sache sollte ja schon in der SQL Abfrage gehen „CONVERT(post_excerpt USING utf8)“ klappte leider nicht. Aber das wird schon

    Das ist keine optimale Lösung. Für direkte Abfragen in der Datenbank sollte aus Sicherheitsgründen zumindest die PHP Class WPDB verwendet werden.

    Thread-Starter pezi

    (@pezi)

    Danke, aber leider schaff ichs nicht damit. ist sicher einfach, aber ohne Englischkenntnisse ist die Anleitung schwierig.

    Hab vieles versucht, aber die Seite bleibt leer, keine Fehlermeldung. Obwohl ich eh einige Debugging Sachen in der wp-cpnfig eingeschaltet habe. Auch im LOG tut sich nicht viel, nur nicht existente Tabellennamen weren angemeckert (klar, die Beispiele kommen ohne mein präfix, wenn man das vergisst…)

    WordPress-Datenbank-Fehler Table ‚meinedbname.wp_options‘ doesn’t exist für Abfrage SELECT * FR ist eine Fehler weil meine Tabellen das präfix „kas_“ davor haben.

    Aber sicher vergesse ich irgendwas um dieses WP DB Objekt richtig herein zu holen oder was weiß ich.

Ansicht von 7 Antworten - 1 bis 7 (von insgesamt 7)
  • Das Thema „Alle Bildunterschriften, Beschreibungen ausgeben“ ist für neue Antworten geschlossen.