Benutzerdefinierte Felder in WordPress

Benutzerdefinierte Felder in WordPress

Ich habe vor einigen Tagen einen Gewinnspiel-Blog gestartet, in dem ich aktuelle Gewinnspiele veröffentliche, bei denen man per Blog, Twitter oder Facebook mitmachen kann. Damit die User auf den ersten Blick sehen können, ob ein Gewinnspiel bereits abgeschlossen ist, wird, nachdem der Einsendeschluss vorbei ist, der Text “abgelaufen” anstelle des Datums eingeblendet werden. In diesem Artikel erkläre ich, wie ihr dies in WordPress durch die Einrichtung von benutzerdefinierten Feldern umsetzen könnt.

Benutzerdefinierte Felder werden von den wenigsten WordPress-Usern verwendet, was wohl daran liegen dürfte, dass für eine sinnvolle Nutzung PHP-Kenntnisse benötigt werden. Ein bisschen schade ist das schon, weil es sich dabei um eine ziemlich mächtige Funktion handelt, wie ihr gleich sehen werdet.

Benutzerdefinierte Felder einrichten

Bevor ihr ein benutzerdefiniertes Feld nutzen könnt, müsst ihr dieses natürlich zuerst einrichten. Nach dem Klick auf den Button “Benutzerdefiniertes Feld hinzufügen” müsst ihr einen Namen (hier: einsendeschluss) und einen Wert (hier: 31.01.2011) vergeben.

Benutzerdefinierte Felder
Benutzerdefiniertes Feld in WordPress

Den Wert des benutzerdefinierten Feldes erhaltet ihr mit folgendem Code:

$termin=get_post_meta($post->ID, 'einsendeschluss', true);

In $termin steht jetzt der Einsendeschluss, also in diesem Fall der 31.01.2011.

Falls das benutzerdefinierte Feld nicht leer ist, …

if (!(empty($termin)))

dann ermittelt ihr mit time() das heutige Datum in Sekunden, die seit dem 01.01.1970 vergangen sind, zerlegt es mit explode() in seine 3 Bestandteile (Monat, Tag, Jahr) und wandelt die Zeit mit mktime() auch in Sekunden um.

$heute = time();
$termin = explode('.', $termin);
$termin = mktime(0,0,0,$termin[1], $termin[0], $termin[2]);

Wenn der Einsendeschluss größer als das heutige Datum ist, also noch in der Zukunft liegt…

if($termin >= $heute)

dann verwende den deutschen Zeichensatz, …

setlocale (LC_ALL, 'de_DE.utf8', 'de_DE@euro', 'de_DE', 'de', 'ge');

setze das Datum ins deutsche Format…

$termin=strftime('%d. %B %Y',$termin);

und gib es anschließend zusammen mit dem Text “Einsendeschluss” aus.

echo "<p><strong>Einsendeschluss:</strong> ".$termin."</p>";

Im anderen Fall (der Einsendeschluss ist schon vorbei), gib “Einsendeschluss: abgelaufen” aus.

else echo "<p><strong>Einsendeschluss:</strong> abgelaufen</p>";

Am übersichtlichsten ist es, wenn ihr den ganzen Code in eine Funktion packt und die in eurem Theme in die functions.php einbaut:

function einsendeschluss($termin)
{
if (!(empty($termin)))
{
$heute = time();
$termin = explode('.', $termin);
$termin = mktime(0,0,0,$termin[1], $termin[0], $termin[2]);
echo $termin;
if($termin >= $heute)
{
setlocale (LC_ALL, 'de_DE.utf8', 'de_DE@euro', 'de_DE', 'de', 'ge');
$termin=strftime('%d. %B %Y',$termin);
echo "<p><strong>Einsendeschluss:</strong> ".$termin."</p>";
}
else echo "<p><strong>Einsendeschluss:</strong> abgelaufen</p>";
}
}

Den Aufruf…

einsendeschluss(get_post_meta($post->ID, 'einsendeschluss', true));

baut ihr dann an der gewünschten Stelle in die loop.php ein. An welcher Stelle genau müsst ihr selbst ausprobieren, da dass bei jedem Theme anders sein kann.

Einen sehr schönen Artikel über benutzerdefinierte Felder findet ihr bei Elma, wo ihr jede Menge Möglichkeiten mit benutzerdefinierten Feldern in WordPress findet.

Verwendet ihr benutzerdefinierte Felder?

Habt ihr schon mal benutzerdefinierte Felder in WordPress eingesetzt? Wenn ja, für welchen Zweck? Schreibt doch bitte in den Kommentaren etwas über die Erfahrungen, die ihr dabei gemacht habt.

Veröffentlicht von

Cujo

Die Webmaster-Zentrale wurde im Januar 2010 von mir gegründet. Dabei haben mich 3 Internetauftritte maßgeblich beeinflusst. Zum einen die Website des t3n-Magazins, www.t3n.de, auf der immer sehr interessante Artikel zum Thema Webseitenerstellung gepostet wurden. Genau solche Artikel wollte ich auch schreiben. Dann bin ich schon seit mehreren Jahren im Homepage-Forum, www.homepage-forum.de, aktiv. Im Laufe der Zeit stellte ich fest, dass dort immer die gleichen Fragen gestellt wurden. Jedesmal darauf die gleichen Antworten zu geben, war erstens langweilig, zweitens zeitraubend und drittens hat es sich nicht gelohnt, die Fragen ausführlich zu beantworten. In der Webmaster-Zentrale greife ich jetzt oft Fragen auf, die im Homepage-Forum gestellt wurden und habe die Möglichkeit die angesprochenen Themen viel detaillierter zu behandeln. Bei wiederkehrenden Fragen poste ich dann einen Link zu einem Artikel in der Webmaster-Zentrale. Dadurch erhalten die User ausführlichere Antworten als normalerweise in einem Forum üblich. Die Idee, Informationen bereitzustellen und diese im Forum zu verlinken, habe ich von Daniel, www.homepage-faqs.de, übernommen. Daniel bezeichnet sich selbst als Forenhelfer und ist sehr aktiv im Homepage-Forum. Er hat schon zahllosen Usern mit seinen Informationen geholfen und ihnen die Grundlagen der Webseitenerstellung erklärt. Diese 3 Webauftritte hatten einen so großen Einfluss auf mich, dass ich sicher behaupten kann, dass es ohne sie die Webmaster-Zentrale nicht geben würde.

4 thoughts on “Benutzerdefinierte Felder in WordPress”

  1. Ich habe das bisher noch nicht genutzt, nicht in WordPress.
    Ich hab mal bei kulando gebloggt, da konnt man kein PHP einfügen, zumindest nur begrenzt und da hab ich mir vieles mit solche benutzerdeffinierte Felder lösen müssen.

  2. Sehr hilfreicher Beitrag… Ich habe ein ähnliches Anliegen (denke auch ein einfacheres). Ich habe benutzerdefinierte Felder (“price” genannt) mit Werten wie “29.9”, die aus einem Feed generiert werden. Wie bekomme ich denn zwei Nachkommastellen hin – also “29.90”?

    Das Textstück sieht so aus:
    <?php if ($price ”) {
    echo($price);}; ?>

    Leider reicht mein PHP nicht aus; daher ist auch die nachfolgende Seite ein Buch mit sieben Siegeln: Number Format

    Wäre schön, falls mir da Jemand weiterhelfen könnte.

    Ciao und weiter so;)

  3. @Bernd Der Link zu Number Format ist schon mal richtig 🙂

    Ich habe es nicht getestet, aber in deinem Fall müsste es so funktionieren:

    <?php $price=number_format($price,2); if ($price ”) {
    echo($price);}; ?>

  4. Vielen Dank Webmaster,

    Obwohl die Lösung so einfach war, hätte ich es wohl nie hinbekommen. So stehts leider um meine PHP Kenntnisse.. hat jedenfalls bestens funktioniert.

    In der Hoffnung vielleicht noch einige Basics draufzukriegen, hast Du nun einen Stammleser mehr 😉

    Einen schönen Abend noch und bis bald…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.