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.