WPML und get_posts()

Wordpress Logo

Gesamtschweizerische Kampagnen sind auf mehrsprachige Sites angewiesen. Bei einfacheren Kampagnen setze ich üblicherweise WordPress als CMS ein und habe für die Mehrsprachigkeit WPML lizenziert. Das Problem: Viele moderne Themes nutzen Slider. Und bei denen funktioniert dann oft die sonst fast magische Übersetzungskraft von WPML nicht mehr. Die  Lösung ist aber ganz einfach.

Aktuell nutze ich für eine Kampagne das WP Theme Sight. Für das Menu, für Pages und Posts funktioniert WPML bestens. Es werden nur die Einträge in der jeweiligen Sprache angezeigt. Probleme dagegen gibt’s beim Slider. Da erscheinen alle entsprechend markierten Posts. Deutsch, französisch, italienisch… alles durcheinander.

Nach langer Suche habe ich die einfache Lösung des Problems gefunden. Der Slider (slideshow.php) holt sich seine Posts mit folgendem Code:

    $args = array(
        'meta_key' => 'sgt_slide',
        'meta_value' => 'on',
        'numberposts' => -1,
        );
    $slides = get_posts($args);

Aber get_posts ist standartmässig mit der Option 'suppress_filters' => true konfiguriert. Entsprechend wirken die WPML Filter nicht. Es genügt, hier mit einer zusätzlichen Zeile die Filterunterdrückung auszuschalten:

    $args = array(
        'meta_key' => 'sgt_slide',
        'meta_value' => 'on',
        'numberposts' => -1,
        'suppress_filters' => false,
        );
    $slides = get_posts($args);