Custom Fields VS. Sidebar

  • Guten Abend,

    Wie kann ich prüfen, ob Custom Fields für meinen Post gesetzt sind? Verstehe ich das richtig, dass die Templatetags nur Ausgabefunktionen sind, bei denen ich nur prüfen kann, ob sie leer oder nicht leer sind??

    Viele Grüße,

    Maiskolben

    PS: ich versuche auf der single.php custom fields 'nichtdynamisch' in der sidebar anzeigen zu lassen und alles dynamische auszublenden. Wenn der User jetzt nicht mehr im Post surft, sondern bspw. auf der Startseite, dann soll wieder nur die dynamische Sidebar angezeigt werden...

    • 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

  • Worum genau geht es Dir denn jetzt? Die Unterscheidung von Einzelansicht und allen anderen Ansichten machst Du einfach mit is_single(). Oder geht es darum, dass an manchen Postings das fed zwar gesetzt, aber leer ist? Mit [COLOR=#000000][COLOR=Black][COLOR=#0000bb]get_post_meta[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$post[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]ID[/COLOR][COLOR=#007700], [/COLOR][COLOR=#dd0000]'12345'[/COLOR][COLOR=#007700], false[/COLOR][/COLOR][COLOR=#007700][COLOR=Black]) kriegst Du das als Array zurück. Ich würde erwarten, dass das dann leer oder null ist, wenn das Feld gar nicht vorhanden ist. Ansonsten enthaält es einen leeren String. Wenn es darum geht, ob ein Wert gesetzt ist, prüfe den Rückgabewert vor dem echo doch einfach mit empty.[/COLOR]
    [/COLOR][/COLOR]

  • Hallo Ammaletu,

    ich würd' einfach gern wissen wollen, ob ich prüfen kann, ob eines oder mehrere Custom Fields in einem Beitrag gesetzt sind. Und wenn keine CF gesetzt sind (keine Keys und keine Values), dann soll die dynamische Sidebar angezeigt werden, wenn ja, dann keine Sidebar...

    Ich weiß nur nicht wie ich die Abfrage machen soll.
    Wenn (alle!) Custom Fields leer, dann zeige Sidebar, sonst, zeige Custom Fields. Ich werd' noch zum Custom Field so oft wie ich das jetzt schon geschrieben habe.

    is_single() kann ich hier nicht gebrauchen, da die ganze Abfrage in dem single.php Template stattfindet...

    Vielen Dank für die Rückmeldung,

    Maiskolben

  • Schau mal hier: http://codex.wordpress.org/Function_Refer…ost_custom_keys

    Also dann wohl so:

    PHP
    if (!empty(get_post_custom_keys($post->ID))) {

    Das prüft ab, ob irgendein Custom Field dranhängt. Wenn Du auch testen willst, ob die Felder Werte gesetzt haben, müsstest Du Dir rund um get_post_custom eine kleine Funktion schreiben, die durchgeht und true zurückgibt, sobald der erste nicht-leere Feldwert gefunden wurde. Siehe: http://codex.wordpress.org/Function_Reference/get_post_custom

    Einmal editiert, zuletzt von Ammaletu (7. Mai 2010 um 13:21)

  • Mhhh... das habe ich auch schon ausprobiert, hab mich ja vorher schlau jemacht. Aaaaber: es nützt nichts. die dynSidebar wird in einem Post mit Attachtment nicht angezeigt (wies sein soll), aber dafür auch nicht in einem Post ohne Attachment - und ebenso anders herum... Ich weiß nicht weiter. Warum kann man nicht die globale Abfrage stellen, ob ein Post Custom Keys hat? Grrr..


    PS:::

    Da mir get_post_custom_keys($post->ID) ein Array zurückgibt, habe ich erfolglos versucht, dieses Array in einen String zu konvertieren (implode()) und den dann zu prüfen, ob er leer ist... FacK! Blank Site...

    Einmal editiert, zuletzt von Maiskolben (7. Mai 2010 um 13:57)

  • Zitat

    Mit Deinem Beispiel bekomme ich gar keinen Output angezeigt, Blank Site...

    Das liegt jetzt aber nicht an einem Klammerfehler, oder?!

  • :-) Ne, die Klammern habe ich nicht vergessen...
    Ich habe es jetzt ziemlich unelegant gelöst, in Ermangelung eines Templatetags. Sag' gern Deine Meinung, vllt hast Du ja noch einen besseren Vorschlag?

    Ich zerhaue das Array (get_post_custom_keys()) erst und werfe die zwei Keys raus die übrigbleiben, wenn keine Werte durch die Custom Fields übergeben werden, und dann füge ich alles zu einem String zusammen, um bei gesetzten CF Werten überprüfen zu können, dass der verkackte String NICHT leer ist.. Bitte?

    Ich will nur zum Bäcker nebenan, aber fahre mit der Bahn nach München und hole mir da Brötchen! :-))

    Vielleicht hast Du (oder irgendwer anders) ja noch eine Idee zu dem leidlichen Thema?

    Maiskolben

  • Zitat

    Mit Deinem Beispiel bekomme ich gar keinen Output angezeigt, Blank Site...

    Ich sehe keinen Fehler, aber wenn dann die Seite ganz weiß bleibt, steckt irgendwo noch einer. Der sollte aber wahlweise am Bildschirm ausgegeben oder in eine Datei geloggt werden.


    Zitat

    Ich zerhaue das Array (get_post_custom_keys()) erst und werfe die zwei Keys raus die übrigbleiben, wenn keine Werte durch die Custom Fields übergeben werden,

    Was meinst Du damit? Fügt noch irgendwer anderes Custom Fields hinzu?!

  • Hallo Ammaletu,

    nein, es fügt niemand andere Fields hinzu. Sieh':

    get_post_custom_keys($post->ID) gibt mir ein Array zurück.

    PHP
    Array (
    [0] => customfield1
    [1] => customfield2
    [2] => _edit_lock
    [3] => _edit_last
    [4] => _mini_post
    [5] => customfield3
    [6] => customfield4
    )

    Sogar wenn keine Custom Fields mit einem Post eingebunden sind, bleiben key 2-4.

    PHP
    Array (
    [0] => _edit_lock
    [1] => _edit_last
    [2] => _mini_post
    )

    Und manchmal fehlt der Key 4 (_mini_post), aus welchen Gründen auch immer.

    PHP
    Array (
    [0] => _edit_lock
    [1] => _edit_last
    )

    Auf jeden Fall sind die Indexes des Arrays immer unsortiert.

    PHP
    Array (
    [0] => customfield2
    [1] => _edit_last
    [2] => customfield3
    [3] => _edit_lock
    [4] => customfield1
    [5] => _mini_post
    [6] => customfield4
    )

    Das ist der Grund, dass mein oben beschriebener Code nicht funktioniert.
    Wenn Du eine Idee hast wie ich prüfen kann, ob Custom Fields gesetzt sind, dann würde ich mich freuen. Vielleicht gibt es ja noch ein verstecktes Template Tag irgendwo?


    Maiskolben

  • Ah, WP gibt da doch die eigenen internen Keys mit zurück. Keys, die mit "_" beginnen, werden in der Oberfläche nicht angezeigt, tauchen hier aber wohl mit auf.

    Ich glaube, am besten schreibst Du da selber eine kleine Funktion has_custom_field, die das abprüft. Dann kannst Du das auch an verschiedenen Stellen nutzen. Du musst halt über das Array noch iterieren und Keys mit "_" ausschließen. Siehe das Code-Beispiel hier:
    http://codex.wordpress.org/Function_Refer…ost_custom_keys

  • Hey Ammaletu!

    Das ist genau das wonach ich gesucht habe! Jetzt kann ich beide Varianten umsetzen...

    Vielen Dank! :)

    Grüße Maiskolben


    PS: Für alle die sich auch damit rumschlagen, wäre noch ein zweiter Gedanke interessant: Anstatt, dass jedes Feld einen anderen Key bekommt (für mich war das ja nur logisch alle entsprechend ihren Inhalten zu benennen: header, cssstyle, vollerbeitrag etc.), haben alle Custom Fields einen gemeinsamen Key (bspw. Sidebar). Siehe dieser kleine Codeschnipsel hier:

    Der gibt dann unabhängig des Keynamens alle Felder in Reihenfolge der Eintragung aus... Ist vllt. auch ganz nett, wenn man in der Reihenfolge der Felder flexibel sein möchte.

    Reingehaun..

    Einmal editiert, zuletzt von Maiskolben (10. Mai 2010 um 16:16)

Jetzt mitmachen!

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