Files
Viktor Miller 71d65eee63 docs(03-03): complete admin notification plan
- Summary documents email notification system implementation
- Admin receives German email on new job submission
- Email includes job details and direct edit link
- Smart triggering prevents spam on updates
- All tasks completed, no deviations

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 19:45:34 +09:00

5.4 KiB

phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, patterns-established, issues-created, duration, completed
phase plan subsystem tags requires provides affects tech-stack key-files key-decisions patterns-established issues-created duration completed
03-job-management-core 03 notifications
email
admin-notification
wp-mail
post-transitions
phase provides
03-job-management-core
job submission form creating pending posts
admin-job-notification
transition-post-status-pattern
03-05
added patterns
transition-post-status-hook
wp-mail-notifications
created modified
includes/class-notifications.php
includes/class-ddhh-job-manager.php
ddhh-job-manager.php
Used transition_post_status to detect only initial pending submissions, avoiding spam on updates
Email sent to admin_email option (WordPress site admin)
Email includes direct edit link for quick access to moderation
Error logging for wp_mail failures (common in Local WP dev)
Notification pattern: Hook transition_post_status with status guards to trigger on state changes only
Email content: German text with job details and admin action links
8min 2026-01-14

Phase 3 Plan 3: Admin Notifications Summary

German email notification to admin on new job submission with title, provider, location, type, and edit link

Performance

  • Duration: 8 min
  • Started: 2026-01-14T11:00:00Z
  • Completed: 2026-01-14T11:08:00Z
  • Tasks: 2
  • Files modified: 3

Accomplishments

  • Created automated email notification system for new job submissions
  • Email sent to site admin immediately when provider submits job for moderation
  • Email includes complete job context: title, author, organization, location, type, submission date
  • Direct edit link enables one-click access to moderation interface
  • Smart triggering prevents spam on post updates (only new → pending transitions)
  • Error logging for debugging email issues in Local WP environment

Task Commits

Each task was committed atomically:

  1. Task 1: Create notification class with admin alert on job submission - 7aeecae (feat)
  2. Task 2: Integrate notifications into plugin initialization - 943544e (feat)

Files Created/Modified

  • includes/class-notifications.php - DDHH_JM_Notifications class with setup_hooks() and send_admin_new_job_notification() method; hooks transition_post_status with guards for job_offer + new pending status; sends German email via wp_mail() with job details and edit link; logs errors if wp_mail fails
  • includes/class-ddhh-job-manager.php - Added init action hook for DDHH_JM_Notifications::setup_hooks() following existing pattern (matches Access_Control, Dashboard, etc.)
  • ddhh-job-manager.php - Added require_once for class-notifications.php

Email Template

The email sent to admin includes:

Subject: Neues Stellenangebot zur Prüfung: {job_title}

Body:

Ein neues Stellenangebot wurde eingereicht und wartet auf Ihre Prüfung.

Titel: {job_title}
Anbieter: {author_name} ({author_organization})
Standort: {job_location}
Art: {job_type}
Eingereicht am: {submission_date}

Prüfen Sie das Stellenangebot hier:
{edit_link}

---
Diese E-Mail wurde automatisch gesendet.

Technical Details

Hook Implementation:

  • Hook: transition_post_status with priority 10, accepts 3 params ($new_status, $old_status, $post)
  • Guards: Only trigger when post_type === 'job_offer' AND new_status === 'pending' AND old_status !== 'pending'
  • This prevents email spam when admins save/update pending posts

Data Extraction:

  • Admin email: get_option('admin_email')
  • Author org: get_user_meta($post->post_author, 'ddhh_org_name', true)
  • ACF fields: get_field('job_location'), get_field('job_type')
  • Date: get_the_date('d.m.Y H:i', $post_id)
  • Edit link: get_edit_post_link($post_id, '')

Email Sending:

  • Function: wp_mail()
  • Headers: 'Content-Type: text/html; charset=UTF-8'
  • Body: Plain text converted to HTML with nl2br(esc_html())
  • Error handling: Logs to error_log if wp_mail() returns false

Decisions Made

transition_post_status vs save_post: Used transition_post_status because it provides old and new status, enabling precise detection of initial pending submission vs subsequent updates. This prevents duplicate notifications when admins edit pending posts.

Error logging strategy: wp_mail() can fail silently in Local WP environments where email is disabled. Added error_log() calls for both missing admin_email and wp_mail() failures so developers can see what's happening during testing.

Email format: Used plain text with nl2br() conversion rather than HTML templates. Simpler, more reliable across email clients, and sufficient for admin notification use case.

Edit link priority: Made edit link prominent in email (separate line with clear call-to-action text) because quick access to moderation is the primary admin need when notified.

Deviations from Plan

None - plan executed exactly as written.

Issues Encountered

None - implementation proceeded smoothly. wp_mail() and transition_post_status are well-documented WordPress core functions with established patterns.

Next Phase Readiness

Ready for 03-04 (admin UI enhancements) and 03-05 (job deactivation). Admin notification system is functional and will trigger whenever providers submit new jobs. The notification provides all context needed for efficient moderation workflow.


Phase: 03-job-management-core Completed: 2026-01-14