Powiadomienia w WordPress mogą znacząco poprawić interakcję z użytkownikami i usprawnić zarządzanie stroną. Mogą informować o nowych wpisach, komentarzach, aktualizacjach lub niestandardowych zdarzeniach w serwisie. W tym artykule pokażemy, jak stworzyć własny system powiadomień w WordPress, działający zarówno dla administratorów, jak i użytkowników.
1. Dlaczego warto tworzyć własny system powiadomień?
WordPress ma wiele wtyczek do powiadomień, ale własny system daje:
- pełną kontrolę nad logiką i wyglądem powiadomień,
- brak zbędnych funkcji i obciążenia wtyczek,
- możliwość integracji z własnymi typami wpisów i akcjami.
Dzięki temu system może obsługiwać powiadomienia w panelu administracyjnym, w frontendzie lub wysyłać e-maile i powiadomienia push.
2. Struktura danych dla powiadomień
Najprostszym sposobem przechowywania powiadomień jest użycie własnego typu wpisu (custom post type) lub własnej tabeli w bazie danych.
Opcja 1: Custom Post Type
function create_notification_post_type() {
register_post_type('notification', [
'labels' => [
'name' => 'Powiadomienia',
'singular_name' => 'Powiadomienie'
],
'public' => false,
'show_ui' => true,
'supports' => ['title', 'editor', 'custom-fields'],
]);
}
add_action('init', 'create_notification_post_type');
public => false – powiadomienia nie są widoczne publicznie, tylko w panelu.
custom-fields pozwala na przechowywanie dodatkowych danych, np. typu powiadomienia czy powiązanego użytkownika.
Opcja 2: Własna tabela w bazie danych
Dla bardzo dużych systemów powiadomień można utworzyć tabelę:
CREATE TABLE wp_notifications (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT UNSIGNED NOT NULL,
message TEXT NOT NULL,
is_read TINYINT(1) DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
Ta metoda daje większą kontrolę nad wydajnością i filtracją powiadomień.
3. Dodawanie powiadomień
Przykład dodania powiadomienia do użytkownika:
function add_notification($user_id, $message) {
$notification = [
'post_type' => 'notification',
'post_title' => wp_trim_words($message, 10),
'post_content' => $message,
'post_status' => 'publish',
'meta_input' => [
'user_id' => $user_id,
'is_read' => 0
]
];
return wp_insert_post($notification);
}
Dla tabeli własnej:
global $wpdb;
$wpdb->insert(
'wp_notifications',
[
'user_id' => $user_id,
'message' => $message,
'is_read' => 0
]
);
4. Wyświetlanie powiadomień
W panelu administratora
Dodajemy widget do dashboardu:
function dashboard_notifications_widget() {
wp_add_dashboard_widget(
'custom_notifications',
'Powiadomienia',
'render_dashboard_notifications'
);
}
function render_dashboard_notifications() {
$notifications = get_posts([
'post_type' => 'notification',
'meta_key' => 'user_id',
'meta_value' => get_current_user_id(),
'post_status' => 'publish'
]);
if ($notifications) {
echo '<ul>';
foreach ($notifications as $note) {
$is_read = get_post_meta($note->ID, 'is_read', true);
echo '<li' . ($is_read ? '' : ' style="font-weight:bold;"') . '>' . esc_html($note->post_title) . '</li>';
}
echo '</ul>';
} else {
echo 'Brak nowych powiadomień.';
}
}
add_action('wp_dashboard_setup', 'dashboard_notifications_widget');
Na froncie strony
Możesz użyć shortcode:
function frontend_notifications_shortcode() {
$notifications = get_posts([
'post_type' => 'notification',
'meta_key' => 'user_id',
'meta_value' => get_current_user_id(),
'post_status' => 'publish'
]);
ob_start();
if ($notifications) {
echo '<ul>';
foreach ($notifications as $note) {
$is_read = get_post_meta($note->ID, 'is_read', true);
echo '<li' . ($is_read ? '' : ' style="font-weight:bold;"') . '>' . esc_html($note->post_title) . '</li>';
}
echo '</ul>';
} else {
echo 'Brak powiadomień.';
}
return ob_get_clean();
}
add_shortcode('user_notifications', 'frontend_notifications_shortcode');
5. Oznaczanie powiadomień jako przeczytane
Dodaj prostą funkcję:
function mark_notification_read($notification_id) {
update_post_meta($notification_id, 'is_read', 1);
}
Na froncie możesz użyć AJAX, żeby użytkownik mógł oznaczyć powiadomienie jako przeczytane bez przeładowania strony.
6. Powiadomienia e-mail
Dla ważnych zdarzeń warto wysyłać powiadomienia e-mail:
function send_email_notification($user_id, $message) {
$user = get_userdata($user_id);
if ($user) {
wp_mail($user->user_email, 'Nowe powiadomienie', $message);
}
}
Możesz połączyć z dodawaniem powiadomień w bazie i wysyłką e-mail w tym samym czasie.
7. Rozszerzenia i pomysły
- Powiadomienia push na przeglądarkę (Web Push API).
- Powiadomienia o statusach zamówień w WooCommerce.
- System filtrów i kategorii powiadomień.
- Integracja z REST API – możliwość pobierania powiadomień w aplikacji mobilnej.
Podsumowanie
Własny system powiadomień w WordPress daje pełną kontrolę nad komunikacją z użytkownikami i administratorami. Możesz go rozbudować o e-maile, powiadomienia push, API i dowolną logikę biznesową. Dzięki temu strona staje się bardziej interaktywna i przyjazna dla użytkowników.