Was Du brauchst
Du willst Bestellungen digital bereitstellen.
Lieferanten sollen Termine zurückmelden.
Und Dein Einkauf will endlich alles an einem Ort sehen.
Geht mit WordPress. Ohne große ERP-Integration. Aber mit Verstand.
Datenbasis: Bestellung, Position, Teillieferung
Wir brauchen 3 Ebenen:
- Bestellung (z. B. 4711)
- Position (z. B. Pos. 10: 50 Bretter, 20 mm Fichte)
- Teillieferung (z. B. 30 Bretter am 10.05., 20 am 17.05.)
Die kannst Du als eigene Tabellen modellieren – oder als CPTs mit Meta-Feldern.
Ich zeig’s hier per Custom Tables.
Tabelle anlegen (einmalig)
function ds_lieferantenportal_tabellen() {
global $wpdb;
$sqls = [];
$sqls[] = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}lp_bestellungen (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
bestellnr VARCHAR(50),
lieferant_id BIGINT,
erstellt DATETIME DEFAULT CURRENT_TIMESTAMP
)";
$sqls[] = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}lp_positionen (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
bestellung_id BIGINT,
artikel VARCHAR(255),
menge INT,
einheit VARCHAR(10)
)";
$sqls[] = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}lp_teillieferungen (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
position_id BIGINT,
menge INT,
lieferdatum DATE
)";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
foreach ($sqls as $sql) {
dbDelta($sql);
}
}
register_activation_hook(__FILE__, 'ds_lieferantenportal_tabellen');
Rollen: Lieferant vs. Mitarbeiter
Du brauchst zwei Benutzerrollen:
- Lieferant: darf eigene Liefertermine erfassen
- Mitarbeiter: sieht alles, kann kommentieren, verwalten
function ds_lieferantenrollen() {
add_role('lieferant', 'Lieferant', [
'read' => true,
]);
add_role('mitarbeiter', 'Mitarbeiter', [
'read' => true,
'edit_posts' => true,
]);
}
register_activation_hook(__FILE__, 'ds_lieferantenrollen');
Dashboard-Ansicht für Lieferanten
Zeig jedem Lieferanten nur seine Bestellungen.
function ds_bestellungen_liste($user_id) {
global $wpdb;
$bestellungen = $wpdb->get_results($wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}lp_bestellungen WHERE lieferant_id = %d",
$user_id
));
foreach ($bestellungen as $b) {
echo '<h3>Bestellung: ' . esc_html($b->bestellnr) . '</h3>';
ds_positionen_liste($b->id);
}
}
function ds_positionen_liste($bestellung_id) {
global $wpdb;
$positionen = $wpdb->get_results($wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}lp_positionen WHERE bestellung_id = %d",
$bestellung_id
));
echo '<ul>';
foreach ($positionen as $p) {
echo '<li>' . esc_html($p->artikel) . ' – ' . esc_html($p->menge) . ' ' . esc_html($p->einheit);
echo '<br>Teillieferung erfassen: <input type="date" name="datum_' . $p->id . '"> <input type="number" name="menge_' . $p->id . '">';
echo '</li>';
}
echo '</ul>';
}
Termin speichern
Einfaches Beispiel für ein Formular-Handling.
function ds_teillieferung_speichern() {
global $wpdb;
$positionen = $_POST['positionen'] ?? [];
foreach ($positionen as $pos_id => $daten) {
if (!empty($daten['datum']) && !empty($daten['menge'])) {
$wpdb->insert($wpdb->prefix . 'lp_teillieferungen', [
'position_id' => intval($pos_id),
'lieferdatum' => sanitize_text_field($daten['datum']),
'menge' => intval($daten['menge']),
]);
}
}
}
add_action('admin_post_ds_lieferung', 'ds_teillieferung_speichern');
Kommunikation: Kommentar pro Position
Du willst Rückfragen oder Hinweise.
Funktioniert mit einer einfachen Kommentartabelle – oder Du verwendest comments
mit comment_type = 'lieferkommentar'
.
wp_insert_comment([
'comment_post_ID' => 0,
'comment_author' => 'Lieferant Mustermann',
'comment_content' => 'Kann erst nächste Woche liefern.',
'comment_type' => 'lieferkommentar',
'user_id' => get_current_user_id(),
]);
Automatische Benachrichtigung an Mitarbeiter
Wenn ein Liefertermin eingeht, willst Du eine Info-Mail.
function ds_benachrichtigung_mail($text) {
$admins = get_users(['role' => 'mitarbeiter']);
foreach ($admins as $a) {
wp_mail($a->user_email, 'Neue Teillieferung eingetragen', $text);
}
}
Einfach aufrufen nach dem Eintrag.
Fazit: Lieferantenportal in WordPress? Geht.
Feature | Status |
---|---|
Bestellungen anzeigen | ✅ |
Teillieferung melden | ✅ |
Termin speichern | ✅ |
Kommentare möglich | ✅ |
Rollen und Rechte | ✅ |
Kein fremdes System. Keine monatlichen Kosten.
Du baust’s einmal – und nutzt es jeden Tag.
No responses yet