Wprowadzenie
Stworzyłem funkcjonalność, która dodaje nagrania do profilu użytkownika i informuje go o tym przez e-mail.
Zrobiłem to, ponieważ chciałem ułatwić przekazywanie wideo kursantom, klientom lub członkom zamkniętej platformy.
Całość opiera się na kodzie PHP i działa wewnątrz WordPressa bez dodatkowych wtyczek – wszystko z poziomu funkcji motywu.
Kod realizuje pełną obsługę danych: ich dodawanie, edycję i automatyczne powiadamianie odbiorcy – bez wysiłku.
Co robi ten kod?
Funkcja wstawia nową sekcję w edycji użytkownika w kokpicie, gdzie można przypisać jedno lub wiele nagrań.
Każde nagranie zawiera nazwę, datę oraz link URL do filmu – np. na YouTube, Vimeo lub innej platformie.
Dzięki temu mogę zarządzać dostępem do nagrań indywidualnie – dla każdego użytkownika osobno, precyzyjnie i skutecznie.
Rozwiązanie przyspiesza proces pracy z klientami i edukacją – oszczędzam czas, działając w znanym środowisku WordPress.
Jak działa dodawanie nagrań WordPress?
Kiedy edytuję użytkownika w WordPressie, widzę dodatkowy formularz – to miejsce na wpisanie nowych nagrań.
Dodaję dane, klikam „Zapisz”, a system analizuje różnice pomiędzy nowym a poprzednim zestawem nagrań.
Jeśli znajdzie nowe pozycje – rozpoznaje je jako świeżo dodane i wysyła e-mail z informacją do właściciela konta.
Dzięki temu dodawanie nagrań WordPress staje się funkcją automatyczną i natychmiastową, bez ręcznego informowania użytkownika.
Komu to się przyda?
Z tej funkcji skorzystają edukatorzy, terapeuci online, konsultanci, szkoły językowe i autorzy zamkniętych kursów wideo.
Każdy, kto publikuje nagrania powiązane z użytkownikami – znajdzie tu gotowe, sprawdzone i bardzo wygodne rozwiązanie.
Nie trzeba instalować żadnych pluginów – wystarczy wkleić kod do functions.php lub stworzyć prostą własną wtyczkę.
Dodawanie nagrań WordPress jest przydatne również w firmach wewnętrznych – np. do przekazywania nagrań onboardingu lub szkoleń.
Jak zmienić treść wiadomości e-mail?
W pliku kodu znajdziesz funkcję zapisz_linki_do_nagran, gdzie znajdują się zmienne $subject i $message.
Tam możesz wpisać dowolną treść – zmienić nagłówek, powitanie, dodawać lub usuwać sekcje wiadomości, spersonalizować ją.
Możesz nawet dołączyć przyciski, podpis graficzny, a także warunkowo pokazywać inne dane – to elastyczny system.
Dzięki temu dodawanie nagrań WordPress daje pełną kontrolę nad formą komunikacji z użytkownikiem końcowym.
Widok dla użytkownika
Gdy użytkownik się zaloguje, może użyć shortcode [moje_filmy] na dowolnej stronie WordPressa.
Po wstawieniu tego shortcode, użytkownik zobaczy listę swoich nagrań: nazwę, datę i przycisk do obejrzenia nagrania.
Jeśli nie ma jeszcze żadnych nagrań przypisanych do jego konta – pojawi się jasna informacja o ich braku.
Całość wygląda przejrzyście i nowocześnie – użytkownik nie potrzebuje żadnych dodatkowych szkoleń, by z tego korzystać.
Podsumowanie
Dzięki tej funkcji wprowadzam porządek, wygodę i automatyzację w przekazywaniu treści multimedialnych użytkownikom.
Mam możliwość pełnej kontroli nad zawartością, sposobem prezentacji i komunikacji mailowej.
Dodawanie nagrań WordPress nie wymaga żadnych dodatkowych zależności – wszystko oparte jest na czystym kodzie PHP.
To gotowe rozwiązanie, które mogę wdrożyć w kilka minut – a zyskać na tym może każdy system edukacyjny czy platforma członkowska.
<?php // 1. Dodawanie pól do edycji profilu użytkownika add_action('show_user_profile', 'dodaj_linki_do_nagran'); add_action('edit_user_profile', 'dodaj_linki_do_nagran'); function dodaj_linki_do_nagran($user) { $nagrania = get_user_meta($user->ID, 'linki_do_nagran', true); if (!is_array($nagrania)) $nagrania = []; ?> <h3>Linki do nagrań</h3> <div id="nagrania-wrapper"> <?php foreach ($nagrania as $index => $n): ?> <div class="nagranie-blok" style="border:1px solid #ccc; padding:10px; margin-bottom:10px;"> <p> <label for="nazwa_<?php echo $index; ?>"><strong>Nazwa spotkania:</strong></label><br> <input type="text" name="linki_do_nagran[<?php echo $index; ?>][nazwa]" id="nazwa_<?php echo $index; ?>" value="<?php echo esc_attr($n['nazwa'] ?? ''); ?>" style="width:100%;"> </p> <p> <label for="data_<?php echo $index; ?>"><strong>Data spotkania:</strong></label><br> <input type="date" name="linki_do_nagran[<?php echo $index; ?>][data]" id="data_<?php echo $index; ?>" value="<?php echo esc_attr($n['data'] ?? ''); ?>"> </p> <p> <label for="link_<?php echo $index; ?>"><strong>Link do nagrania:</strong></label><br> <input type="url" name="linki_do_nagran[<?php echo $index; ?>][link]" id="link_<?php echo $index; ?>" value="<?php echo esc_url($n['link'] ?? ''); ?>" style="width:100%;"> </p> <button type="button" class="usun-nagranie button">- Usuń</button> </div> <?php endforeach; ?> </div> <p><button type="button" class="button" id="dodaj-nagranie">+ Dodaj nowe nagranie</button></p> <script> document.addEventListener('DOMContentLoaded', function () { const wrapper = document.getElementById('nagrania-wrapper'); const button = document.getElementById('dodaj-nagranie'); let index = <?php echo count($nagrania); ?>; button.addEventListener('click', function () { const div = document.createElement('div'); div.classList.add('nagranie-blok'); div.style.border = "1px solid #ccc"; div.style.padding = "10px"; div.style.marginBottom = "10px"; div.innerHTML = ` <p> <label><strong>Nazwa spotkania:</strong></label><br> <input type="text" name="linki_do_nagran[\${index}][nazwa]" style="width:100%;"> </p> <p> <label><strong>Data spotkania:</strong></label><br> <input type="date" name="linki_do_nagran[\${index}][data]"> </p> <p> <label><strong>Link do nagrania:</strong></label><br> <input type="url" name="linki_do_nagran[\${index}][link]" style="width:100%;"> </p> <button type="button" class="usun-nagranie button">- Usuń</button> `; wrapper.appendChild(div); index++; }); wrapper.addEventListener('click', function (e) { if (e.target.classList.contains('usun-nagranie')) { e.target.closest('.nagranie-blok').remove(); } }); }); </script> <?php } // 2. Zapisywanie danych po edycji profilu + wysyłka e-maila przy nowym nagraniu add_action('personal_options_update', 'zapisz_linki_do_nagran'); add_action('edit_user_profile_update', 'zapisz_linki_do_nagran'); function zapisz_linki_do_nagran($user_id) { if (!current_user_can('edit_user', $user_id)) return; $stare = get_user_meta($user_id, 'linki_do_nagran', true); if (!is_array($stare)) $stare = []; if (isset($_POST['linki_do_nagran']) && is_array($_POST['linki_do_nagran'])) { $czyste = []; $nowe = []; foreach ($_POST['linki_do_nagran'] as $item) { $nazwa = sanitize_text_field($item['nazwa'] ?? ''); $data = sanitize_text_field($item['data'] ?? ''); $link = esc_url_raw(trim($item['link'] ?? '')); if ($link || $nazwa || $data) { $nowe_element = [ 'nazwa' => $nazwa, 'data' => $data, 'link' => $link ]; $czyste[] = $nowe_element; if (!in_array($nowe_element, $stare)) { $nowe[] = $nowe_element; } } } update_user_meta($user_id, 'linki_do_nagran', $czyste); // Wysyłka e-maila jeśli są nowe nagrania if (!empty($nowe)) { $user = get_user_by('ID', $user_id); $email = $user->user_email; $imie = get_user_meta($user_id, 'first_name', true); if (!$imie) $imie = $user->display_name; $subject = 'Nowe nagranie na Twoim koncie'; $message = "Cześć $imie,\n\nNa Twoim koncie zostało dodane nowe nagranie.\n\n"; foreach ($nowe as $n) { $message .= "- " . ($n['nazwa'] ?: 'Bez nazwy') . " (" . ($n['data'] ?: 'brak daty') . ")\n" . $n['link'] . "\n\n"; } $message .= "Tutaj wpisz treść swojej wiadomości email"; wp_mail($email, $subject, $message); } } } // 3. Shortcode do wyświetlania nagrań użytkownika add_shortcode('moje_filmy', 'wyswietl_nagrania_uzytkownika'); function wyswietl_nagrania_uzytkownika() { if (!is_user_logged_in()) { return '<p>Musisz być zalogowany, aby zobaczyć swoje nagrania.</p>'; } $user_id = get_current_user_id(); $nagrania = get_user_meta($user_id, 'linki_do_nagran', true); if (!is_array($nagrania) || empty($nagrania)) { return '<p>Brak nagrań do wyświetlenia.</p>'; } $output = '<div class="moje-filmy">'; foreach ($nagrania as $n) { $nazwa = esc_html($n['nazwa'] ?? 'Bez nazwy'); $data = esc_html($n['data'] ?? ''); $link = esc_url($n['link'] ?? '#'); $output .= '<div class="nagranie-item" style="margin-bottom:20px;">'; $output .= '<div class="nazwa-spotkania">'; $output .= '<span class="nazwa-spotkania" style="display:block; font-weight:bold;">' . $nazwa . '</span>'; if ($data) { $output .= '<span class="data-spotkania" style="display:block; color:#555;">' . $data . '</span>'; } $output .= '</div>'; $output .= '<div class="guzik-do-nagrania">'; $output .= '<a href="' . $link . '" class="button" target="_blank" rel="noopener noreferrer">Idź do nagrania</a>'; $output .= '</div>'; $output .= '</div>'; } $output .= '</div>'; return $output; } ?>