Hi zusammen,
wir wollten in WordPress einfach nur die Anzahl der Mitglieder einer bestimmten Gruppe anzeigen. Da das standardmäßig nicht möglich ist, habe ich dafür einen eigenen Shortcode geschrieben. Mit diesem Shortcode lässt sich die Mitgliederanzahl einer Gruppe anzeigen, die über Webling angelegt wurde.
Der Shortcode sieht wie folgt aus:
[webling_membercount id="1"]
Die id entspricht dabei der ID der gewünschten Gruppe aus Webling.
Hier der zugehörige PHP-Code (für die functions.php):
/* Webling Membercount mit Gruppen-Parameter */
// Shortcode: [webling_membercount id="1"]
add_shortcode('webling_membercount', function($atts) {
global $wpdb;
$attributes = shortcode_atts([
'id' => null
], $atts);
if (!$attributes['id']) {
return 'Fehlende ID im Shortcode.';
}
$id = intval($attributes['id']);
$config = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}webling_memberlists WHERE id = " . esc_sql($id), ARRAY_A);
if (!$config) {
return 'Mitgliederliste mit dieser ID wurde nicht gefunden.';
}
try {
$memberIds = WeblingMemberlistHelper::getMemberlistMemberIds($config);
$count = count($memberIds);
return (string) $count;
} catch (Exception $e) {
if (WP_DEBUG) {
trigger_error($e->getMessage());
}
return 'Fehler beim Laden der Mitgliederanzahl.';
}
});
/* Ende: Membercount */
Ich habe darüber hinaus noch einige weitere Shortcodes entwickelt, um die Mitgliederzahlen einzelner Sportgruppen (oder aber auch alle Sportgruppen aus Webling) darzustellen. Da mir der manuelle Aufwand in WordPress zu aufwändig war, habe ich diesen Prozess automatisiert.
Hier ist der Code, der alle Gruppen inkl. Anzahl der Mitglieder auflistet:
add_shortcode('webling_groups', function () {
try {
$tree = WeblingApiHelper::Instance()->getMembergroupTree();
if (empty($tree)) {
return 'Keine Gruppen gefunden.';
}
// Count members by faking a listconfig that the plugin understands
$countMembers = function ($groupId) {
$listconfig = [
'id' => 999999, // fake ID just for cache key uniqueness
'type' => 'GROUPS',
'groups' => serialize([$groupId]),
];
$memberIds = WeblingMemberlistHelper::getMemberlistMemberIds($listconfig);
return is_array($memberIds) ? count($memberIds) : 0;
};
// Recursively render the tree
$renderTree = function ($nodes, $depth = 0) use (&$renderTree, $countMembers) {
$html = '';
foreach ($nodes as $id => $node) {
$count = $countMembers($id);
$indent = str_repeat(' ', $depth);
$html .= '<li>' . $indent . esc_html($node['title']) . ': Mitglieder: ' . $count . '</li>';
if (!empty($node['childs'])) {
$html .= $renderTree($node['childs'], $depth + 1);
}
}
return $html;
};
$output = '<ul class="webling-groups">';
$output .= $renderTree($tree);
$output .= '</ul>';
return $output;
} catch (Exception $e) {
if (WP_DEBUG) {
trigger_error($e->getMessage());
}
return 'Fehler beim Laden der Gruppen.';
}
});
/* Membercount by groupname ende */
Ich habe noch weitere Shortcodes um zB die Mitgliederanzahl einzelner Gruppen automatisiert anzuzeigen, aber diese Erweiterungen basieren allerdings auf unserem individuellen Setup mit benutzerdefinierten Feldern (Custom Fields) und können daher hier nicht veröffentlicht werden. Bei uns hat jede Gruppe eine eigene Unterseite (über Custom Fields) und dort werden dann die relevanten Infos aus Webling automatisiert gezogen.
Wer Interesse daran hat, kann mir aber gerne eine PN schicken. https://webdesignhamburg.net/