Cette requête supprime toutes les catégories de votre message parce que vous lui dites avec vous la clause where. Vous dites essentiellement, supprimez chaque enregistrement de la table posts_categories qui a un post id =$post_id. Vous devez ajouter à votre clause where pour la rendre plus spécifique.
$delete_id = mysqli_query($mysqli,"DELETE FROM posts_categories WHERE post_id = '" . $post_id . "' AND categoryID = '". $query_cat_id[$x] ."'");
Cela dit maintenant la même chose que vous avez faite mais ajoute un qualificatif supplémentaire. Supprimez uniquement les lignes de la table où le post_id est $post_id et l'ID de la catégorie est (valeur de votre case décochée).
Avis de non-responsabilité :je tente de deviner où vous stockez vos identifiants de catégorie dans votre fonction($query_cat_id[$x]).