18. November 2024
WordPress-Plug-in „Custom Field Suite“ – Bugfix
Leider ist die Entwicklung des WordPress-Plug-ins „Custom Field Suite“ im Sommer diesen Jahres eingestellt worden. Ich habe das Plug-in immer gerne genutzt und werde es auch noch weiterhin auf Websites einsetzen.
Allerdings gibt es in diesem Plug-in einen Bug, der mich schon des öfteren verwirrt hat. Wenn man z.B. einen Post mit einem Metafeld „Datum“ erstellt und dieses Datum anschließend noch mal ändert, wird der Post im WordPress-Loop an falscher Stelle ausgegeben. Der Fehler, den CFS hier macht ist, dass mehrere Datenbankeinträge mit der gleichen post_id erzeugt werden. CFS legt also einen neuen Eintrag an, statt den alten zu aktualisieren.
Während mit „CFS()->get(’startdatum‘)“ der richtige Wert ausgegeben wird, wird mit „get_post_meta(get_the_ID(), ’startdatum‘, true)“ der alte Wert noch der alte Wert ausgegeben.
Mit folgendem Code in functions.php kann dieser Bug beseitigt werden:
add_action('save_post', function($post_id) {
global $wpdb;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (!current_user_can('edit_post', $post_id)) {
return;
}
$duplicates_query = "
DELETE pm1
FROM {$wpdb->postmeta} pm1
INNER JOIN {$wpdb->postmeta} pm2
ON pm1.post_id = pm2.post_id
AND pm1.meta_key = pm2.meta_key
AND pm1.meta_id < pm2.meta_id
WHERE pm1.post_id = %d
";
$wpdb->query($wpdb->prepare($duplicates_query, $post_id));
});
Code-Sprache: PHP (php)
Hier wird die Datenbank beim Speichern eines Posts um doppelte Einträge bereinigt.