Sidebar
ein-/ausblenden

Benutzerdefinierte Felder außerhalb des WordPress Loop

Plugin für WordPress SEO

Anzeige

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>

20 Kommentare zu „Benutzerdefinierte Felder außerhalb des WordPress Loop“

  1. 1
    Kommentar von pehbehbeh

    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?)

  2. 2
    Kommentar von Frank Bültge

    @pehbehbeh: ja, danke und gefixt

  3. 3
    Kommentar von Basti

    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...

  4. 4
    Kommentar von Basti

    OK. Mein Code wurde trotzdem verschluckt. Die Frage war:
    Was spricht dagegen, das über "get_posts('numberposts=3&meta_key=my-image');" zu machen ?

  5. 5
    Kommentar von Basti

    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>

  6. 6
    Kommentar von Frank Bültge

    @Basti: der code wurde geschluckt, bitte maskieren.

  7. 7
    Kommentar von Frank Bültge

    @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.

  8. 8
    Kommentar von Webstandard-Blog

    Für mich als WordPress-Newbie, ein durchaus hilfreicher Tipp von Dir Frank.

  9. 9
    Kommentar von Peter Löwenstein

    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

  10. 10
    Kommentar von Nicki

    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.

  11. 11
    Kommentar von Steffanie

    ..immer wieder tolle Hilfen hier im Blog. Ich werde hier noch zu einem Spezi. Leider habe ich noch immer arge Probleme mit Java Script.

  12. 12
    Kommentar von Tobias

    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.

  13. 13
    Kommentar von Robby

    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?

  14. 14
    Kommentar von Frank Bültge

    @Robby: prinzipiell ja - kann ich aber nicht so sagen, da man auf das Plugin zugreifen muss und ich dies noch nie gemacht habe.

  15. 15
    Kommentar von Basti

    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.

  16. 16
    Kommentar von Robby

    @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. 17
    Kommentar von Tobias

    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.

  18. 18
    Kommentar von merpil

    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

  19. 19
    Kommentar von Frank Bültge

    @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.

  20. 20
    Kommentar von merpil

    @ Danke

Kommentar schreiben

Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.

Kommentar-Hilfe

händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.

Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.

xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>

Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als &lt; und > als &gt; einfügt.

E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.

Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.

Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.

Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.