wp-md-rest-import/CHANGELOG.md

6.8 KiB

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
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
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
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.