Phase 3: Job Management Core - 4 plans created - 8 total tasks defined - Ready for execution Plans: - 03-01: Job submission form (Formidable + ACF) - 03-02: Job edit form with ownership validation - 03-03: Admin email notification on submission - 03-04: Admin moderation UI enhancements Parallelization: - Wave 1: 03-01, 03-02, 03-04 (independent) - Wave 2: 03-03 (depends on 03-01)
7.7 KiB
phase, plan, type, depends_on, files_modified
| phase | plan | type | depends_on | files_modified | |||
|---|---|---|---|---|---|---|---|
| 03-job-management-core | 04 | execute |
|
Purpose: Give admins efficient tools to moderate job submissions. Better visibility = faster moderation = core value delivered. Output: Admin job listing with pending count badge, status filters, and provider info columns.
<execution_context> ~/.claude/get-shit-done/workflows/execute-plan.md ~/.claude/get-shit-done/templates/summary.md </execution_context>
@.planning/PROJECT.md @.planning/ROADMAP.md @.planning/STATE.md @.planning/phases/01-foundation-setup/01-02-SUMMARY.md @.planning/phases/01-foundation-setup/01-03-SUMMARY.md @includes/class-post-types.php @includes/class-acf-fields.phpTech stack available: WordPress admin hooks, job_offer CPT, ACF fields Established patterns: German labels for admin UI Constraining decisions:
- Admin moderation is core workflow (PROJECT.md)
- Jobs start as pending (Phase 01-03)
- ACF fields available: job_location, job_type, job_contact_email
Custom Columns for job_offer post type:
Hook into manage_job_offer_posts_columns filter to add columns:
- Anbieter (Provider) - Organization name + contact person
- Standort (Location) - job_location ACF field
- Art (Type) - job_type ACF field
- Eingereicht am (Submitted) - Post creation date
Remove default columns if cluttering:
- 'date' (replaced by custom "Eingereicht am")
- 'author' (replaced by custom "Anbieter" with org name)
Hook into manage_job_offer_posts_custom_column action to populate column data:
- Anbieter: Display
{org_name}<br><small>{contact_person}</small>where org_name is user meta 'ddhh_org_name' - Standort: get_field('job_location', $post_id)
- Art: get_field('job_type', $post_id)
- Eingereicht am: get_the_date('d.m.Y H:i', $post_id)
Make columns sortable via manage_edit-job_offer_sortable_columns filter (at minimum: Eingereicht am, Standort, Art).
AVOID cluttering admin with too many columns - remove non-essential defaults. WHY: Admins need to see moderation-relevant info at a glance, not every detail.
- Class file created with proper structure
- Custom columns registered via manage_*_columns hooks
- Column data populated correctly
- Sortable columns work
- php -l includes/class-admin-ui.php (no errors)
- Admin columns added: Anbieter, Standort, Art, Eingereicht am
- Column data populated from user meta and ACF fields
- Sortable columns functional
- No PHP syntax errors
Status Filters:
Hook into views_edit-job_offer filter to add custom view links:
- All
- Pending (Ausstehend)
- Published (Veröffentlicht)
- Draft (Entwurf)
Each link should include count of posts in that status.
Pending Count Badge: Add visual badge to "Pending" link using CSS class 'count':
$pending_count = wp_count_posts('job_offer')->pending;
$views['pending'] = sprintf(
'<a href="%s">%s <span class="count">(%d)</span></a>',
admin_url('edit.php?post_type=job_offer&post_status=pending'),
__('Ausstehend', 'ddhh-job-manager'),
$pending_count
);
Make "Pending" link prominent if count > 0 - admins should see it immediately.
Quick Actions: Keep default WordPress quick actions (Edit, Quick Edit, Trash) - don't remove. Consider adding custom "Approve" quick action that publishes post directly:
- Link: wp_nonce_url with action 'approve_job'
- Handler: Check nonce, verify user is admin, update post_status to 'publish'
- Optional but helpful for one-click approval
AVOID removing WordPress's built-in quick actions - admins expect them. WHY: Standard WordPress UX, admins are familiar with Edit/Trash.
- Status filter links present in admin
- Pending count badge shows correct number
- Filters work correctly when clicked
- Quick actions functional
- php -l includes/class-admin-ui.php (no errors)
- Status filter links added with counts
- Pending badge visible and accurate
- Filters functional
- Quick actions preserved (Edit, Trash, etc.)
- No PHP syntax errors
File 2: includes/class-ddhh-job-manager.php Initialize admin UI hooks (admin-only):
if ( is_admin() ) {
add_action( 'init', array( 'DDHH_JM_Admin_UI', 'setup_hooks' ) );
}
Create setup_hooks() static method in DDHH_JM_Admin_UI class that registers all admin hooks:
- manage_job_offer_posts_columns
- manage_job_offer_posts_custom_column
- manage_edit-job_offer_sortable_columns
- views_edit-job_offer
AVOID loading admin hooks on frontend - check is_admin(). WHY: Performance - frontend doesn't need admin column logic.
- Require statement added to main plugin file
- Admin UI hooks initialized only in admin
- setup_hooks() method exists in DDHH_JM_Admin_UI
- php -l on both files (no errors)
- Admin UI class required
- Hooks initialized (admin-only)
- Integration complete
- No PHP syntax errors
<success_criteria>
- All tasks completed
- Admin moderation UI enhanced
- Custom columns provide visibility
- Status filters aid workflow
- Phase 3 complete - ready for Phase 4 </success_criteria>
phase: 03-job-management-core plan: 04 subsystem: admin-ui tags: [admin, moderation, columns, filters, wordpress-admin] requires: [01-02, 01-03] provides: [admin-job-columns, status-filters] affects: [] tech-stack: added: [] patterns: [admin-columns, admin-filters, sortable-columns] key-files: created: [includes/class-admin-ui.php] modified: [includes/class-ddhh-job-manager.php, ddhh-job-manager.php] key-decisions:
- Removed default 'author' and 'date' columns in favor of custom ones
- Pending count badge for visibility
- Admin-only hook loading for performance issues-created: []
Phase 3 Plan 4: Admin Moderation UI Summary
[Substantive one-liner - what shipped]
Accomplishments
- [Key outcomes]
Files Created/Modified
includes/class-admin-ui.php- [description]includes/class-ddhh-job-manager.php- [description]ddhh-job-manager.php- [description]
Admin Interface Changes
[Screenshot or description of new columns, filters, badges]
Decisions Made
[Implementation choices, or "None"]
Issues Encountered
[Problems and resolutions, or "None"]
Next Step
Phase 3 complete. Ready for Phase 4: Job Deactivation System