Tworzenie własnego systemu powiadomień w WordPress dla administratorów i użytkowników

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.

KROK 1 Z 4

Z CZYM POTRZEBUJESZ POMOCY?