191 lines
6.8 KiB
Markdown
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.
|