Um die Kategorie eines Beitrags direkt im Frontend ändern zu können, kannst du eine WordPress-Funktion mit einem benutzerdefinierten Formular erstellen. Diese Funktion ermöglicht es Benutzern, die Kategorie eines Beitrags ohne den Admin-Bereich zu ändern. Hier ist eine Schritt-für-Schritt-Anleitung, wie du dies umsetzen kannst:
Schritt 1: Sicherheitsüberlegungen
- Stelle sicher, dass nur berechtigte Benutzer (z. B. Administratoren oder Redakteure) Zugriff auf die Funktion haben, um Kategorien zu ändern.
- Überprüfe Benutzerberechtigungen, bevor du Änderungen am Beitrag vornimmst.
Schritt 2: HTML-Formular für die Kategorieauswahl
Füge in deinem Theme-Template (z. B. single.php oder einem benutzerdefinierten Template) ein HTML-Formular ein, das alle Kategorien zur Auswahl anbietet:
<?php if (current_user_can('edit_posts')): ?>
<form id="change-category-form" method="post">
<label for="post_category">Kategorie ändern:</label>
<select name="post_category" id="post_category">
<?php
// Hole alle Kategorien
$categories = get_categories(array('hide_empty' => false));
foreach ($categories as $category):
// Überprüfen, ob die Kategorie dem Beitrag bereits zugewiesen ist
$selected = has_category($category->term_id, get_the_ID()) ? 'selected' : '';
?>
<option value="<?php echo esc_attr($category->term_id); ?>" <?php echo $selected; ?>>
<?php echo esc_html($category->name); ?>
</option>
<?php endforeach; ?>
</select>
<input type="hidden" name="post_id" value="<?php the_ID(); ?>">
<input type="submit" name="change_category" value="Kategorie ändern">
</form>
<?php endif; ?>
Schritt 3: PHP-Funktion zum Aktualisieren der Kategorie
Füge den folgenden Code in die functions.php deines Child-Themes ein. Diese Funktion wird das Formular verarbeiten und die Kategorie des Beitrags aktualisieren:
function handle_category_change() {
// Überprüfen, ob das Formular abgeschickt wurde
if (isset($_POST['change_category'])) {
// Sicherheitsüberprüfung: Benutzerberechtigungen prüfen
if (!current_user_can('edit_posts')) {
wp_die('Du hast keine Berechtigung, diesen Beitrag zu bearbeiten.');
}
// Sicherheitsüberprüfung: Validieren der Nonce
if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'change_category_nonce')) {
wp_die('Sicherheitsüberprüfung fehlgeschlagen.');
}
// Hole die Daten aus dem Formular
$post_id = intval($_POST['post_id']);
$new_category = intval($_POST['post_category']);
// Beitrag aktualisieren und neue Kategorie setzen
if ($post_id && $new_category) {
wp_set_post_categories($post_id, array($new_category));
wp_redirect(get_permalink($post_id)); // Umleitung zur aktuellen Beitragsseite
exit;
}
}
}
add_action('init', 'handle_category_change');
Schritt 4: Sicherheitsüberprüfung mit Nonce
Um das Formular sicher zu machen, solltest du eine Nonce (eine einmalige Sicherheitsnummer) hinzufügen. Aktualisiere das Formular in deinem Template wie folgt:
<?php if (current_user_can('edit_posts')): ?>
<form id="change-category-form" method="post">
<label for="post_category">Kategorie ändern:</label>
<select name="post_category" id="post_category">
<?php
// Hole alle Kategorien
$categories = get_categories(array('hide_empty' => false));
foreach ($categories as $category):
// Überprüfen, ob die Kategorie dem Beitrag bereits zugewiesen ist
$selected = has_category($category->term_id, get_the_ID()) ? 'selected' : '';
?>
<option value="<?php echo esc_attr($category->term_id); ?>" <?php echo $selected; ?>>
<?php echo esc_html($category->name); ?>
</option>
<?php endforeach; ?>
</select>
<input type="hidden" name="post_id" value="<?php the_ID(); ?>">
<?php wp_nonce_field('change_category_nonce'); // Nonce hinzufügen ?>
<input type="submit" name="change_category" value="Kategorie ändern">
</form>
<?php endif; ?>
Schritt 5: Testen
- Melde dich als Benutzer mit den erforderlichen Berechtigungen (z. B. Administrator) an.
- Navigiere zu einem Beitrag und versuche, die Kategorie über das Formular zu ändern.
- Überprüfe, ob die Kategorie des Beitrags erfolgreich geändert wird und ob eine Sicherheitsüberprüfung stattfindet.
Zusammenfassung
Mit dieser Funktion können berechtigte Benutzer die Kategorie eines Beitrags direkt im Frontend ändern. Das Formular ist durch Benutzerberechtigungen und Nonce-Überprüfung abgesichert, um sicherzustellen, dass nur autorisierte Benutzer Änderungen vornehmen können. Dies ist eine flexible Lösung, um Kategorien schnell und direkt auf der Website zu verwalten.
