web-dev-qa-db-fra.com

Migration de Markdown (à partir de Drupal)

Je suis en train de migrer mon blog de Drupal vers Wordpress. J'ai fait un usage libéral de Markdown dans les publications originales (et surlignage de la syntaxe Geshi).

Dans voir que le plugin WP-Markdown convertit en (et à partir de HTML) sur enregistrer (et modifier), donc j'ai maintenant un tas de messages qui apparaissent avec le Markdown 'on show'.

Existe-t-il un appel d'API que je peux utiliser pour effectuer efficacement une opération "modifier et enregistrer" sur chaque message afin de forcer le plug-in Markdown on Save à fonctionner sur tous?

Ou alternativement, un autre plugin Markdown que je devrais essayer?

4
Martin Thompson

Remarque: Ce qui suit est en grande partie non testé (cela fonctionnait après des tests sur un message).

Comme vous l'avez fait remarquer lors de la modification d'un article, le plug-in récupère le contenu de la base de données (HTML) et le convertit en MarkDown pour le modifier. Étant donné que dans votre cas, le contenu n'est en réalité pas en HTML, mais déjà dans MarkDown, nous voulons empêcher cela. Ensuite, en mettant à jour le message, le plug-in doit convertir MarkDown en HTML.

Cela devrait être assez facile à faire car cette analyse est simplement liée à certains filtres, vous supprimez simplement les rappels appropriés pour empêcher le plug-in de faire quoi que ce soit. (Encore une fois, étant donné la structure de classe du plug-in, ce n'est peut-être pas si facile ). Dans ce cas, vous souhaiterez peut-être simplement modifier manuellement les fichiers du plug-in pour supprimer les filtres.

Les filtres en question sont ajoutés ici .

add_filter( 'edit_post_content', array( $this, 'wpautop' ), 10, 2 );
add_filter( 'edit_post_content', array( $this, 'edit_post_content' ), 10, 2 );

Les supprimer (manuellement ou autrement), puis mettre à jour chacun des posts devrait fonctionner. Mais cela pourrait prendre un certain temps, alors allons-y pour une solution automatisée ...

   function wpse65948_correct_markdown(){

        //Only run script if ?markdown=correct is set
        if( empty($_GET['markdown']) || 'correct' !== $_GET['markdown'] )
             return;

        if( !current_user_can('publish_posts') )
             return;

        //Do a query to get all posts that are expected to contain markdown
        //Typically will be decided by post type. Set post_status to 'any'.
        $markdowns = get_posts( array(
             'fields'=>'ids',
             'post_type'=>'post',
             'post_status'=>'any',
         ) );

         //If no posts found abort.
         if( !$markdowns )
            return;

         /** !Important 
          *  At this point the filters should be removed. Either remove them now
          *  or ensure they have been manually removed prior to triggering this script.
          */
         foreach ($markdowns as $pid ){

             // Get the content for editing
             $markdown = get_post_to_edit( $pid );

             //$markdown->post_content should contain the correct MarkDown
             $update_post = array();
             $update_post ['ID'] = $pid;
             $update_post ['post_content'] = $markdown->post_content;

             //Update the post into the database
             wp_update_post( $update_post);
          }
   }

   add_action('admin_init','wpse65948_correct_markdown',20);

Vous devez d’abord tester ce script avec l’un de vos messages pour vérifier son bon fonctionnement avant de le lancer pour le reste.

Le script peut être ajouté tout en bas du fichier wp-markdown.php ou functions.php. Supprimez-le après utilisation . Pour déclencher le script, ajoutez simplement ?markdown=correct à une URL d'administrateur.

Si vous supprimez manuellement les filtres avant d'exécuter ce script, veillez à les remplacer à nouveau.

6
Stephen Harris