Wie verwalte ich die Buddypress-Aktivität auf einer mehrsprachigen Website?

Lesezeit: 3 Minuten

Ich suche schon seit einiger Zeit nach einer Antwort auf diese Frage. Kumpelpresse funktioniert sehr gut auf mehrsprachigen Websites, insbesondere mit “WPML”- und “BuddyPress Multilingual”-Plugins, aber es gab immer noch ein Problem mit dem globalen Activity Stream-Modul (ein bisschen wie eine soziale Wand, die es jedem ermöglicht, Inhalte zu veröffentlichen).

Denn egal welche Sprache ausgewählt ist, alle Publikationen in allen Sprachen werden immer im selben Feed gemischt. Da es (soweit ich weiß) keine Möglichkeit gibt, für jede Sprache einen Feed anzuzeigen, musste ich einen Workaround finden.

Meine Idee war also, die aktuell angezeigte Sprache zu speichern, wenn der Benutzer auf die Schaltfläche „Veröffentlichen“ klickt, diesen Wert als Attribut zu jedem Beitrag hinzuzufügen und sie dann mit CSS zu filtern.

So funktioniert es:

Schritt 1: Fügen Sie eine Sprachklasse zu body hinzu, um die aktuell angezeigte Sprache zu identifizieren. Dieser erste Schritt ist der einfachste, hängt aber vom verwendeten Plugin ab (WPML, Polylang, Weglot, qTranslate…). Für WPML zum Beispiel müssen Sie diese Funktion nur in die Datei functions.php Ihrer .php einfügen Kinderthema:

function body_class_language( $classes ) {
    if ( ICL_LANGUAGE_CODE == 'en' ) {
        $classes[] = 'en';
    } elseif ( ICL_LANGUAGE_CODE == 'fr' ) {
        $classes[] = 'fr';
    }
    return $classes;
}
add_filter('body_class','body_class_language');

Schritt 2: Fügen Sie eine Funktion hinzu, ebenfalls im Child-Theme der functions.php, die zunächst die aktuell angezeigte Sprache identifiziert und sie dann in der Datenbank speichert, wenn der Benutzer auf die Schaltfläche „Veröffentlichen“ klickt.

function save_activity_extra_fields( $activity ) {
    global $wpdb;
    $activity_id = $activity -> id;
    $save = $wpdb->insert(
        'wp_bp_activity_meta',
        array( 'activity_id' => $activity_id,  'meta_key' => 'lang','meta_value' => get_bloginfo( 'language' ) ),
        array( '%d', '%s', '%s' ),
    );
} 
add_action('bp_activity_after_save', 'save_activity_extra_fields');

/!\ Stellen Sie nur sicher, dass Sie das Tabellenpräfix wp_ entsprechend Ihrer DB (wp_bp_activity_meta) ändern!

Schritt 3: Jetzt müssen Sie jedem Beitrag ein Sprachattribut hinzufügen (li). Bearbeiten Sie diese Datei “plugins/buddypress/bp-templates/bp-nouveau/buddypress/activity/entry.php” und ändern Sie Zeile 14:

<li class="<?php bp_activity_css_class(); ?>" id="activity-<?php bp_activity_id(); ?>" <?php bp_nouveau_activity_data_attribute_id(); ?> data-bp-timestamp="<?php bp_nouveau_activity_timestamp(); ?>">

Das mögen

global $wpdb;
$lang = $wpdb->get_results( "SELECT `meta_value` FROM `wp_bp_activity_meta` WHERE `meta_key` = 'lang' AND `activity_id` = ". bp_get_activity_id() );
$lang = $lang[0]->meta_value;
?>

<li class="<?php bp_activity_css_class(); ?>" id="activity-<?php bp_activity_id(); ?>" <?php bp_nouveau_activity_data_attribute_id(); ?> data-bp-timestamp="<?php bp_nouveau_activity_timestamp(); ?>" data-bp-lang="<?php echo $lang; ?>">

/!\ Vergessen Sie auch hier nicht, das Tabellenpräfix wp_ entsprechend Ihrer DB (wp_bp_activity_meta) zu ändern!

Anschließend speichern Sie die Datei unter „themes/YOUR-CHILD-THEME/buddypress/activity/“, damit Ihre Änderungen nicht gelöscht werden, wenn Buddypress aktualisiert wird

Schritt 4: Jetzt müssen Sie nur noch jeden Beitrag nach der Sprache filtern, die derzeit auf der Website angezeigt wird. Und dafür ist es am einfachsten und schnellsten, diese Zeilen in das CSS deines Child-Themes einzufügen.

body.fr li[data-bp-lang="en-US"],
body.en li[data-bp-lang="fr-FR"] {
    display: none;
}

Sie können auch eine Dropdown-Liste erstellen, die es jedem Benutzer ermöglicht, die Beiträge in der gewünschten Sprache anzuzeigen, aber das ist eine andere Geschichte.

Voilà, in meinem Beispiel werden auf einer Website in zwei Sprachen (Englisch und Französisch) die Posts der Aktivität in Französisch nur auf der französischen Website angezeigt, und die Posts in Englisch werden nur auf der englischen Website angezeigt.

Ich hoffe das hilft.

1442470cookie-checkWie verwalte ich die Buddypress-Aktivität auf einer mehrsprachigen Website?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy