wp-md-rest-import/CHANGELOG.md

191 lines
6.8 KiB
Markdown

# Markdown Parser WP - Fehlerbehebungen
## Übersicht der Korrekturen
Dieses Update behebt die folgenden Probleme im Markdown Parser WP Plugin:
1. **Tags-Mapping**: Tags werden jetzt korrekt erstellt und mit IDs verarbeitet
2. **Beitragsbilder**: Der Import und die Zuweisung von Beitragsbildern funktionieren jetzt zuverlässig
3. **Bild-Blöcke**: Die Konvertierung von Markdown-Bildern zu Gutenberg-Blöcken wurde verbessert
## Detaillierte Änderungen
### 1. Tags-Mapping
Die `map_metadata_to_taxonomies`-Methode in der `MarkdownParser`-Klasse wurde überarbeitet, um:
- Zu überprüfen, ob Tags bereits existieren
- Neue Tags zu erstellen, wenn sie nicht existieren
- Die korrekten Tag-IDs zurückzugeben statt nur der Tag-Namen
- Die Tags korrekt mit dem Beitrag zu verknüpfen
```php
public static function map_metadata_to_taxonomies($metadata) {
$taxonomies = [];
// Map tags from keywords
if (isset($metadata['keywords']) && is_array($metadata['keywords'])) {
$tag_ids = [];
foreach ($metadata['keywords'] as $keyword) {
$tag_name = sanitize_text_field($keyword);
// Check if tag exists
$existing_tag = get_term_by('name', $tag_name, 'post_tag');
if ($existing_tag) {
// Use existing tag ID
$tag_ids[] = (int) $existing_tag->term_id;
} else {
// Create new tag and get its ID
$new_tag = wp_insert_term($tag_name, 'post_tag');
if (!is_wp_error($new_tag)) {
$tag_ids[] = (int) $new_tag['term_id'];
}
}
}
// Store tag IDs
$taxonomies['post_tag'] = $tag_ids;
}
return $taxonomies;
}
```
### 2. Beitragsbilder
Die Funktionalität zum Importieren und Setzen von Beitragsbildern wurde verbessert:
- Die `set_featured_image`-Methode in der `PostCreator`-Klasse wurde überarbeitet, um relative URLs besser zu behandeln
- Eine neue `import_external_image`-Methode wurde direkt in der `PostCreator`-Klasse implementiert
- Die WordPress-Funktion `media_sideload_image` wird jetzt verwendet, mit einem Fallback auf eine manuelle Import-Methode
- Zusätzliche Metadaten werden gespeichert, um die Bild-URL und ID zu referenzieren
```php
private static function set_featured_image($post_id, $metadata, $original_url = '') {
$image_url = null;
// Check for image in metadata
if (isset($metadata['image'])) {
$image_url = $metadata['image'];
} elseif (isset($metadata['cover']) && isset($metadata['cover']['image'])) {
$image_url = $metadata['cover']['image'];
// Handle relative URLs
if (isset($metadata['cover']['relative']) && $metadata['cover']['relative'] === true && !empty($original_url)) {
// Determine base URL from original URL
$base_url = dirname($original_url) . '/';
$image_url = $base_url . $image_url;
}
}
if ($image_url) {
// Make sure the image URL is valid
if (!filter_var($image_url, FILTER_VALIDATE_URL)) {
// Try to make it a valid URL if it's a relative path
if (strpos($image_url, 'http') !== 0 && !empty($original_url)) {
$base_url = dirname($original_url) . '/';
$image_url = $base_url . ltrim($image_url, '/');
}
}
// Download and set featured image
$attachment_id = self::import_external_image($image_url, $post_id);
if ($attachment_id && !is_wp_error($attachment_id)) {
// Set as featured image
set_post_thumbnail($post_id, $attachment_id);
// Also store the attachment ID as post meta for reference
update_post_meta($post_id, '_markdown_parser_featured_image_id', $attachment_id);
update_post_meta($post_id, '_markdown_parser_featured_image_url', $image_url);
}
}
}
```
### 3. Bild-Blöcke
Die Konvertierung von Markdown-Bildern zu Gutenberg-Blöcken wurde verbessert:
- Die `create_image_block`-Methode in der `BlocksConverter`-Klasse wurde überarbeitet
- Bild-Dimensionen werden jetzt korrekt gesetzt
- Bildunterschriften werden unterstützt
- Die richtige CSS-Klasse wird für WordPress-Bilder gesetzt
```php
private static function create_image_block($src, $alt = '', $attachment_id = '') {
$block_attrs = [
'url' => $src,
'alt' => $alt
];
if ($attachment_id) {
$block_attrs['id'] = (int) $attachment_id;
// Get image dimensions if available
$image_meta = wp_get_attachment_metadata($attachment_id);
if ($image_meta && isset($image_meta['width']) && isset($image_meta['height'])) {
$block_attrs['width'] = $image_meta['width'];
$block_attrs['height'] = $image_meta['height'];
$block_attrs['sizeSlug'] = 'full';
}
// Get caption if available
$attachment = get_post($attachment_id);
if ($attachment && !empty($attachment->post_excerpt)) {
$block_attrs['caption'] = $attachment->post_excerpt;
}
}
// Create the image block with proper figure and figcaption if needed
$figure_html = '<figure class="wp-block-image';
// Add size class if available
if (isset($block_attrs['sizeSlug'])) {
$figure_html .= ' size-' . $block_attrs['sizeSlug'];
}
$figure_html .= '">';
// Add image tag
$figure_html .= '<img src="' . esc_url($src) . '" alt="' . esc_attr($alt) . '"';
// Add width and height if available
if (isset($block_attrs['width']) && isset($block_attrs['height'])) {
$figure_html .= ' width="' . esc_attr($block_attrs['width']) . '"';
$figure_html .= ' height="' . esc_attr($block_attrs['height']) . '"';
}
// Add class and close img tag
$figure_html .= ' class="wp-image-' . esc_attr($attachment_id) . '"/>';
// Add caption if available
if (isset($block_attrs['caption'])) {
$figure_html .= '<figcaption>' . esc_html($block_attrs['caption']) . '</figcaption>';
}
$figure_html .= '</figure>';
return '<!-- wp:image ' . json_encode($block_attrs) . ' -->' .
$figure_html .
'<!-- /wp:image -->';
}
```
## Installation
1. Deaktivieren Sie die vorherige Version des Plugins in WordPress
2. Löschen Sie das alte Plugin-Verzeichnis
3. Laden Sie die neue Zip-Datei `markdown-parser-wp-fixed.zip` hoch
4. Aktivieren Sie das Plugin wieder
## Testergebnisse
Die Korrekturen wurden umfassend getestet und funktionieren wie erwartet:
- Tags werden korrekt erstellt und mit IDs verarbeitet
- Beitragsbilder werden korrekt importiert und gesetzt
- Bild-Blöcke werden korrekt konvertiert mit allen erforderlichen Attributen
Bei Fragen oder Problemen stehe ich gerne zur Verfügung.