Für Menschen · Seien Sie begeistert und Sie werden begeistern !
Die benutzerdefinierten Felder werden immer wieder gern eingesetzt, manchmal auch außerhalb des Loop und damit kommt man nicht ohne weiteres an die Daten. Eine Möglichkeit ist das Nutzen eines kleines SQL-Queries und schon stehen die Daten außerhalb des Loop zur Verfügung und die Werte, die man zum Beitrag pflegt, können auch außerhalb des Loop genutzt werden.
Das folgende simple Beispiel dient als Basis und muss an die Bedürfnisse angepasst werden, ebenso kann man eine Funktion dafür erstellen - viel Spaß damit. Genügend Raum zum Ausbau also und eher eine Ablage für mich und andere, als ein Tutorial, wie ich es sonst gern pflege und erkläre.
<ul>
<?php
global $wpdb;
$sql = "SELECT wpposts.*
FROM $wpdb->posts wpposts, $wpdb->postmeta wppostmeta
WHERE wpposts.ID = wppostmeta.post_id
AND wppostmeta.meta_key = 'my-image'
AND wpposts.post_status = 'publish'
AND wpposts.post_type = 'post'
ORDER BY wpposts.post_date DESC LIMIT 3";
$pageposts = $wpdb->get_results($sql, OBJECT);
foreach ($pageposts as $post) : setup_postdata($post); ?>
<li><a href="<?php the_permalink(); ?>" title="Link to <?php echo get_the_title(); ?>">
<img src="<?php echo get_post_meta($post->ID, "my-image", $single = true); ?>" alt="<?php echo get_the_title(); ?>" /></a>
</li>
<?php endforeach; ?>
</ul>
Insofern man über WordPress Zugriff verfügt, also innerhalb WordPress arbeitet oder die wp-load.php eingebunden hat, reicht ein kleiner Zugriff auf den Query von WordPress mit der ID und man kann die Inhalte der benutzerdefinierten Felder laden und sich den umständlichen Select sparen.
global $wp_query;
$post_id = $wp_query->post->ID;
$value = get_post_meta( $post_id, 'Name_of_custom_Field', TRUE );
echo $value; // Ausgabe des Wert zum benutzerdef. Feld
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 980 Beiträge, 18727 Kommentare in 14 Kategorien und 464 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet. Erstellt mit ♥ zum Befüllen und Erhalten.
Design und Code ist unter Copyright
© 2001 - 2012 bueltge.de [by:ltge.de]
21. April 2010 um 00:42
Trotzdem ein guter Tipp, der mir eine Woche früher ein bisschen Zeit gespart hätte.
(Kleiner Tippfehler in der WHERE-Zeile: "wpposts.ID" statt "wposts.ID", oder?)
21. April 2010 um 07:33
@pehbehbeh: ja, danke und gefixt
21. April 2010 um 09:49
Hi, vielleicht is es noch zu früh für Hirnaktivitäten... Aber was spricht dagegen, es so zu machen:
ID, 'my-image', true); ?>
< a href="" title="Link to ">
< img src="" alt="" />
^^ Hab das nicht getestet. Die Leerzeichen vor den "<" hab ich eingefügt, damit die Tags nicht verschluckt werden...
21. April 2010 um 09:51
OK. Mein Code wurde trotzdem verschluckt. Die Frage war:
Was spricht dagegen, das über "get_posts('numberposts=3&meta_key=my-image');" zu machen ?
21. April 2010 um 10:02
Kommentar-Hilfe-Leser wissen mehr. Und ich sollt mich vielleicht nochmal schlafen legen
Sorry für die Kommentar-Schwemme.
<ul><?php
$pageposts = get_posts('numberposts=3&meta_key=my-image');
foreach ($pageposts as $post) {
setup_postdata($post);
$my_image = get_post_meta($post->ID, 'my-image', true); ?>
<li>
<a href="<?php the_permalink(); ?>" title="Link to <?php echo get_the_title(); ?>">
<img src="<?php echo get_post_meta($post->ID, "my-image", $single = true); ?>" alt="<?php echo get_the_title(); ?>" />
< /a>
</li>
<?php } ?>
</ul>
21. April 2010 um 10:15
@Basti: der code wurde geschluckt, bitte maskieren.
21. April 2010 um 11:10
@Basti: nix, es ist nur eine andere Form, du nutzt ja quasi damit den Loop von WP, den der wird via get_posts() angesprochen. Deine Version ist eigentlich schöner, müsste nur mal schauen, wie viele Queries im UNterschied sind, das wäre das ienzige, was ich an Bedenken hätte, wenn es um Performance geht.
21. April 2010 um 11:58
Für mich als WordPress-Newbie, ein durchaus hilfreicher Tipp von Dir Frank.
21. April 2010 um 15:17
Danke für deinen Tipp.
Eine Alternative ist auch der Einsatz eines Plugins, wenn es um benutzerspezifische Extrafelder geht. Ich weiss, klingt abgedroschen. Trotzdem finde ich cimyuserextrafields nützlich und gut dokumentiert :
Englische Dokumentation
21. April 2010 um 18:11
Top! Ich halte eher die Option für nützlich eine Abfrage zu gestallten ob ein bestimmter key vergeben ist - ist dies der Fall, dann können dadurch generell weitere Aktionen "gestartet" werden ... bsp. stylesheets oder javascript einzubinden.
Bsp: Ich vergebe den key für eine attachment url (bild) - ist der key vergeben (und nur dann) wird im header ein grösseres ladeintensives script (lightbox) eingebunden:
ID, 'attachment', true);
if($lightbox) : ?>
Kombiniert mit deinem Beispiel lässt sich so beispielsweise ein komplexes GRID (via css) ohne frameworks oder grösserer scripte einfach und sicher realisieren.
21. April 2010 um 22:50
..immer wieder tolle Hilfen hier im Blog. Ich werde hier noch zu einem Spezi. Leider habe ich noch immer arge Probleme mit Java Script.
22. April 2010 um 01:31
Hey,
also ich find's einfacher einen neuen Loop mit einem neuen $wp_query Objekt zu bauen. In den meisten Fällen ist die Abfrage mittels der query_posts strings einfacher als eine direkte SQL-Abfrage, finde ich. Und in dem neuen Objekt sind ja auch alle Custom Fields drin.
2. Mai 2010 um 19:41
Funktioniert das auch mit einem Wordtube Code? [media id=xy] Wäre interessant so in der Sidebar des jeweiligen Artikels das passende File wiederzugeben! Oder gibts da eine alternative?
3. Mai 2010 um 09:17
@Robby: prinzipiell ja - kann ich aber nicht so sagen, da man auf das Plugin zugreifen muss und ich dies noch nie gemacht habe.
3. Mai 2010 um 10:10
Also Shortcodes kann man auch mit
<?php
echo do_shortcode('[media id='.$xy.']');
?>
ausgeben... Vielleicht hilft das ja - ich weiß nicht genau, wie Wordtube aufgebaut ist.
3. Mai 2010 um 12:51
@Frank & Basti
Eben alle Varianten durchgetestet und keine Funktioniert mit dem Wordtube Code. Interessanter Weise funktioniert das noch nicht einmal innerhalb eines Loops und den Benutzerdefinierten Feldern. Nur im Content selbst. Na das wird vielleicht noch gefixt..
17. Mai 2010 um 01:44
Hallo Robby,
bei mir hat das mit einer älteren Version von Wordtube und WP glaube ich mal mit
$video = get_post_meta($post->ID, 'Video', true);
echo apply_filters('the_content', $video);
funktioniert. Bin mir aber nicht so ganz sicher, ob ich Dich richtig verstehe... den shortcode hatte ich als benutzerdefiniertes Feld 'Video' eingegeben.
11. Juni 2010 um 13:40
Hallo Frank,
ich weiss gar nicht ob meine frage hier passend ist aber als eine WP neulinge lese ich deine blog seite für seite durch und lerne sehr viel. Nun möchte ich auch dieses artikel nutzen um benutzerdefiniertefelder hinzufügen. Ich möchte aber diese customfields nur einblenden wenns gewünscht wird ( eigentlich wie deine sidebar ein- ausblende funktion)
Gebe es denn dafür einen plugin oder beschreibung? Ich danke dir
11. Juni 2010 um 14:29
@merpil: das ein/ausblenden passiert via JavaScript, dazu gibt es sehr viele Ansätze, ich mache dies hier mit der Bibliothek jQuery und nutze dort nur eine Funktion dafür. Suche mal nach slide und jquery, hier im Blog und im Netz gibt es da einiges.
11. Juni 2010 um 16:54
@ Danke
28. Oktober 2010 um 15:16
Hi an alle, die an dieser Seite gearbeitet haben.
Manchmal steht man wie ein Ochs vorm Berg und sieht die einfachsten Lösungen gar nicht. In einem solchen Fall ist es dann gut, wenn es noch Leute wie euch gibt. Beide Ansätze finde ich äußerst interessant und konnte diese auf einer meiner Webseiten gut verwenden. Wie sagt man so schön: Man muss nicht alles wissen, sondern nur wissen, wie man es im Internet findet. Nochmals vielen Dank
15. Januar 2011 um 22:44
Hallo. Und wieder einmal hat mir die Seite hier geholfen...
Ich hab Stunden versucht über ein query_posts('meta_key=Feldname&order=meta_value'); meine Posts zu sortieren... egal welche Optionen ich rein- oder rausgenommen habe, es ist keine Sortierung erfolgt. Sogar die Sortierung nach title funktionierte nicht!? Ein Entfernen der Option meta_key hatte aber Auswirkungen, weshalb alle Anschein nach die Optionen ja verarbeitet wurden...
Wie auch immer, die Lösung von Basti in den Kommentaren hat es nun gerichtet! DANKE.
24. März 2011 um 17:23
@holger...wo isn der unterschied?
22. Januar 2012 um 16:15
Hallo.. was hat es mit dem "$single = true" auf sich? wofür ist das gut?
22. Januar 2012 um 16:45
@Markus: ein einziges Resultat, als String in der Rückgabe; ansonsten könnte auch ein Array o.ä. kommen. siehe Codex
22. Januar 2012 um 21:26
@Frank: Ah ok
dann ist das also nur eine andere Schreibweise
lese ich sonst nochmal selber nach..
($post->ID, "my-image", true) oder ($post->ID, "my-image", $single = true) beides das gleiche oder?
Danke für den informatieven Post!