toscho.design

WordPress: Automatisch alle Postformate unterstützen

In WordPress 3.1 wurden die beiden Post-Taxonomien post_tag und category um eine weitere ergänzt: post_format. Derzeit stehen zehn zur Auswahl:

  1. standard
  2. aside
  3. chat
  4. gallery
  5. link
  6. image
  7. quote
  8. status
  9. video
  10. audio

Selbst ergänzen können wir sie nicht, denn sie sollen ja ein Standard sein, der auch dann noch funktioniert, wenn der Nutzer das Theme wechselt. Damit man sie überhaupt verwenden kann, muß sich das Theme in der Setup-Funktion als willig deklarieren und die unterstützten Formate explizit auflisten:

add_theme_support(
    'post-formats',
    array( 'aside', 'video' )
);

Auf den ersten Blick nicht falsch. Aber … wenn der Nutzer nun zu einem Theme wechselt, das zwei andere Formate unterstützt, oder wenn wir unser Theme später um ein Format nachrüsten, dann hat kein älterer Beitrag das passende Format. Deshalb finde ich es praktisch, gleich alle Formate aufzulisten, selbst wenn ich die im Theme nicht besonders behandle.

Der maximal unelegante Weg sieht so aus:

add_theme_support(
    'post-formats',
    array(
        'aside',
        'chat',
        'gallery',
        'link',
        'image',
        'quote',
        'status',
        'video',
        'audio'
    )
);

Hier haben wir zwei Probleme:

  1. Dieser Code ist geschwätzig; er wiederholt einfach Werte, die WordPress schon aus der Funktion get_post_format_strings() kennt.
  2. Kommt einmal ein neues Format hinzu ('code' bitte!), müssen wir die Liste wieder anfassen.

Jetzt könnten wir einfach get_post_format_strings() benutzen:

add_theme_support(
    'post-formats',
    array_keys( get_post_format_strings() )
);

Allerdings haben wir nun das Format 'standard' in der Liste, und daran scheitert WordPress sehr … originell: Der Eintrag Standard wird verdoppelt.

Doppelter Standard

Also zuppeln wir den heraus, und dann übergeben wir die komplette Liste.

add_theme_support(
    'post-formats',
    array_diff(
        array_keys( get_post_format_strings() ),
        array( 'standard' )
    )
);

Postformate

Justin Tadlock zeigt gerade in einer Serie, wie man die einzelnen Formate im Theme behandeln kann. Sie beginnt mit dem Format chat.