Automattic / Automattic/php-toolkit

Feature: Add Classic Editor & Standard HTML Support for Post Import/Export (PushMd)

Ouverte
#91 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
PHP
Étoiles
22
Forks
5
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Overview

Currently, Push MD assumes all WordPress posts use the Gutenberg Block Editor and wraps content in block comments (e.g., <!-- wp:paragraph -->). On sites or post types where the Classic Editor is active (or where Gutenberg is disabled), importing Markdown yields block-comment markup in plain HTML editors, while exporting classic HTML posts is broken and even simple headings and lists do not convert to clean Markdown.

I understand Gutenberg is much cleaner to implement and HTML can be messy. But a lot of people still use Classic Editor or hand coded HTML.

We should support Classic Editor and non-block post types natively during both import (Markdown → HTML) and export (HTML → Markdown).

Note: I've already implemented this and will be sending a PR soon. Creating this issue for reference.


Technical Plan

1. Editor Detection Strategy
  • Introduce a helper method is_block_editor_enabled( $post_type ) in Push_MD_Plugin:
    • Check WordPress core's use_block_editor_for_post_type( $post_type ) when available.
    • Fall back to checking if register_block_type exists.
    • Provide a filter push_md_use_block_editor allowing developers to override the decision per post type.
2. Markdown Consumer Wrapper (Push_MD_Markdown_Consumer)
  • Wrap WordPress\Markdown\MarkdownConsumer to handle classic editor post targets (because we may not want to modify the vendor components):
    • When block editor is enabled for the target post type: delegate directly to MarkdownConsumer to return Gutenberg block markup.
    • When block editor is disabled for the target post type:
      • Consume Markdown via MarkdownConsumer.
      • Strip Gutenberg block comment wrappers (e.g., <!-- wp:... --> and <!-- /wp:... -->).
      • Remove block-specific CSS classes (wp-block-*).
      • Normalize excess blank lines to output clean standard HTML suitable for the Classic Editor.
3. Markdown Producer Wrapper (Push_MD_Markdown_Producer)
  • Wrap WordPress\Markdown\MarkdownProducer to handle posts without block markup (because we may not want to modify the vendor components):
    • Detect whether content contains Gutenberg blocks (has_blocks( $content ) or fallback delimiter check <!-- wp:).
    • Gutenberg content: Delegate to MarkdownProducer and normalize the output Markdown.
    • Classic/Standard HTML content: Extract post metadata into YAML frontmatter and convert standard HTML into clean Markdown.
4. HTML to Markdown Converter (Push_MD_HTML_Converter)
  • Provide bidirectional conversion and normalization utilities for HTML/Markdown:
    • Convert standard HTML tags (headings, paragraphs, lists, links, blockquotes, inline formatting) into idiomatic Markdown.
    • Handle list items, line breaks, and paragraph spacing cleanly without redundant blank lines.
    • Provide normalization routines for produced Markdown output - for common quirks like extra spaces, non-breaking spaces etc.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par Push_MD_Plugin et suivez les chemins d’importation/exportation à travers Push_MD_Markdown_Consumer et Push_MD_Markdown_Producer. Examinez les API WordPress nommées pour la détection de l’éditeur ainsi que les exigences de Push_MD_HTML_Converter. Le travail est terminé lorsque les articles de l’éditeur de blocs conservent le comportement de Gutenberg, tandis que les articles de Classic Editor et de HTML standard sont convertis proprement dans les deux sens, y compris les métadonnées et la mise en forme.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
php, wordpress
Domaine
backend, content
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.