Hooks & Filters

The PHP extension points and stored data available in Kanbanz 1.0.1.

Note: Kanbanz 1.0.1 has no shortcodes, no front-end embed and no REST API routes. The interface runs in wp-admin and uses admin-ajax.php with nonces. The filters below are the supported way to customise it. Kanbanz does not fire its own action hooks for task events. For those, hook WordPress core actions on the kanbanz_task post type, such as save_post_kanbanz_task or updated_post_meta for task_status.

Filters

kanbanz_board_templates

Add, change or remove the templates shown on Add New Board. Each template is keyed by a unique slug.

add_filter('kanbanz_board_templates', function ($templates) {
    $templates['bug_tracker'] = array(
        'key'         => 'bug_tracker',
        'name'        => __('Bug Tracker', 'my-plugin'),
        'description' => __('Triage and fix reported bugs.', 'my-plugin'),
        'statuses'    => array('Reported', 'Triaged', 'Fixing', 'Verified', 'Closed'),
        'color'       => '#ef4444',
    );
    unset($templates['hr_onboarding']); // hide a built-in template
    return $templates;
});

The last entry in statuses becomes the board's “completed” column.

kanbanz_boards_per_page

The maximum number of boards loaded on the listing and in board pickers. Default: 100.

add_filter('kanbanz_boards_per_page', function () { return 250; });

kanbanz_tasks_per_page

The number of tasks loaded per column when a board opens. It receives the value from Settings → Tasks Per Column / Page.

add_filter('kanbanz_tasks_per_page', function ($per_page) { return 30; });

kanbanz_analytics_max_range_days

The largest date range, in days, that an analytics query will process. Default: 366. Longer ranges are cut off at this limit to protect memory. Return 0 to remove the cap (not recommended).

add_filter('kanbanz_analytics_max_range_days', function () { return 730; });

kanbanz_ticket_url_base

The base URL for “open ticket” links on Deskuss-linked tasks. The Deskuss bridge sets it from Deskuss's URL slug. Override it if your helpdesk lives elsewhere.

Deskuss actions Kanbanz listens to

These actions are fired by Deskuss, not by Kanbanz. They are listed here so you know which Deskuss events change your boards.

deskuss_wp_create_task            ($ticket)
deskuss_wp_sync_task_assignment   ($ticket_id)
deskuss_wp_sync_task_unassignment ($ticket_id)
deskuss_wp_sync_task_status       ($ticket_id, $status_id, $status_state)
deskuss_wp_sync_ticket_event      ($ticket_id, $state, $data)
deskuss_wp_close_task             ($ticket_id)
deskuss_wp_ticket_replied         ($ticket_id, $response_id)
deskuss_wp_ticket_message         ($ticket_id, $message_id)
deskuss_wp_add_department         ($dept, $post_data)
deskuss_wp_update_department      ($dept, $post_data)
deskuss_wp_delete_department      ($dept_id)

Data reference

Post types

Post typeNotes
kanbanz_boardTitle = board name, content = description.
kanbanz_taskpost_parent = board ID, title = task name, content = description.

Common meta keys

KeyOnHolds
board_statusesBoardOrdered array of column names
kanbanz_wip_limitsBoardcolumn => limit map
kanbanz_team_associationBoardArray of team member logins
kanbanz_board_managersBoardArray of assigned manager logins
kanbanz_completion_modeBoardeveryone, managers or custom
kanbanz_completion_allowed_usersBoardLogins allowed to complete tasks in custom mode
deskuss_dept_linkBoardLinked Deskuss department ID
kanbanz_sla_configBoardPro: SLA rules (status_name, target_hours, warning_hours)
task_statusTaskCurrent column name
priorityTaskPriority level
due_dateTaskDue date
kanbanz_link_ticketTaskLinked Deskuss ticket number
kanbanz_time_entriesTaskPro: time log entries

Options

OptionHolds
kanbanz_settingsGeneral and notification settings
kanbanz_version / kanbanz_pro_versionInstalled versions, used by the update checks
kanbanz_cron_enabledDeskuss auto-sync on/off
kanbanz_dept_delete_policy, kanbanz_dept_reassign_boardWhat happens when a Deskuss department is deleted
kanbanz_last_cron_syncTime and results of the last sync
kanbanz_pro_licensePro license data

Treat stored data as internal. Meta keys may change between versions. Prefer the filters above, and test after every update if you read meta directly.