Warum WordPress als Portal für Eingangsrechnungen?
Wenn Du jeden Monat PDF-Rechnungen manuell prüfen und weiterleiten musst, verlierst Du Zeit.
Und oft auch den Überblick.
Mit einem WordPress-Portal kannst Du:
- Rechnungen zentral hochladen
- Status und Prüfung digital abbilden
- Freigaben dokumentieren
- Zugriffe steuern (Lieferant, Buchhaltung, GF)
Ohne neues System.
Mit PHP und Benutzerrollen.
Struktur: CPT für Rechnung + Metadaten
function ds_register_rechnungen() {
register_post_type('eingangsrechnung', [
'label' => 'Eingangsrechnungen',
'public' => false,
'show_ui' => true,
'supports' => ['title', 'custom-fields'],
'capability_type' => 'post',
'menu_icon' => 'dashicons-media-document',
]);
}
add_action('init', 'ds_register_rechnungen');
Wichtige Metafelder
lieferant_name
rechnungsnummer
betrag_netto
steuerbetrag
pruefer_id
status
(offen
,geprüft
,freigegeben
,abgelehnt
)rechnungsdatum
fällig_am
Formular für Upload im Backend oder Frontend
<form method="POST" enctype="multipart/form-data" action="<?php echo esc_url(admin_url('admin-post.php')); ?>">
<input type="hidden" name="action" value="ds_rechnung_upload">
<input type="text" name="lieferant" placeholder="Lieferant" required>
<input type="text" name="nummer" placeholder="Rechnungsnummer" required>
<input type="number" name="betrag" placeholder="Nettobetrag" required>
<input type="file" name="beleg" accept="application/pdf" required>
<button type="submit">Rechnung hochladen</button>
</form>
Upload-Verarbeitung und Post-Anlage
add_action('admin_post_ds_rechnung_upload', 'ds_rechnung_upload');
function ds_rechnung_upload() {
$user = wp_get_current_user();
$beleg_id = media_handle_upload('beleg', 0);
if (is_wp_error($beleg_id)) wp_die('Fehler beim Upload');
$post_id = wp_insert_post([
'post_type' => 'eingangsrechnung',
'post_title' => 'Rechnung ' . sanitize_text_field($_POST['nummer']),
'post_status' => 'publish',
]);
update_post_meta($post_id, 'lieferant_name', sanitize_text_field($_POST['lieferant']));
update_post_meta($post_id, 'rechnungsnummer', sanitize_text_field($_POST['nummer']));
update_post_meta($post_id, 'betrag_netto', floatval($_POST['betrag']));
update_post_meta($post_id, 'beleg_id', $beleg_id);
update_post_meta($post_id, 'status', 'offen');
update_post_meta($post_id, 'pruefer_id', $user->ID);
wp_redirect(home_url('/danke'));
exit;
}
Status-Workflow mit Benutzerrolle
Rolle | Funktion |
---|---|
Lieferant | Rechnung hochladen |
Prüfer | Status ändern, Kommentar |
Buchhaltung | Freigegebene Rechnungen exportieren |
function ds_status_aendern($post_id, $status) {
$erlaubt = ['offen', 'geprüft', 'freigegeben', 'abgelehnt'];
if (in_array($status, $erlaubt)) {
update_post_meta($post_id, 'status', $status);
}
}
Anzeige: Rechnungen nach Status
function ds_get_rechnungen($status = 'offen') {
$args = [
'post_type' => 'eingangsrechnung',
'meta_query' => [
[
'key' => 'status',
'value' => $status
]
],
'posts_per_page' => -1
];
return get_posts($args);
}
Rechnungsfreigabe protokollieren
function ds_rechnung_loggen($post_id, $aktion, $benutzer_id) {
$log = get_post_meta($post_id, 'freigabelog', true) ?: [];
$log[] = [
'zeit' => current_time('mysql'),
'user' => $benutzer_id,
'aktion' => $aktion
];
update_post_meta($post_id, 'freigabelog', $log);
}
CSV-Export geprüfter Rechnungen
function ds_rechnungen_exportieren() {
$rechnungen = ds_get_rechnungen('freigegeben');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="freigegebene_rechnungen.csv"');
$output = fopen('php://output', 'w');
fputcsv($output, ['Lieferant', 'Nummer', 'Netto', 'Datum']);
foreach ($rechnungen as $r) {
fputcsv($output, [
get_post_meta($r->ID, 'lieferant_name', true),
get_post_meta($r->ID, 'rechnungsnummer', true),
get_post_meta($r->ID, 'betrag_netto', true),
get_the_date('Y-m-d', $r->ID)
]);
}
fclose($output);
exit;
}
Mein Fazit
Du brauchst kein SAP, um Rechnungen zu prüfen.
Mit WordPress, CPT und ein bisschen PHP baust Du Dir ein Portal, das genau das tut, was Du brauchst.
Wenn Du willst, setz ich Dir das Grundgerüst auf.
Dann kannst Du Rechnungen nicht nur empfangen – sondern auch beherrschen.
Keine Antworten