Migration de Markdown (à partir de Drupal)

4

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

Pour que le plug-in WP-Markdown soit converti en (et en HTML) lors de la sauvegarde (et de l'édition), j'ai maintenant un tas de publications 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 poste afin de forcer le plug-in Markdown on Save à fonctionner sur tous?

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

    
posée Martin Thompson 22.09.2012 - 13:21

1 réponse

6

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

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 que cela se produise. 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. (Là encore, compte tenu de 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 qu'il fonctionne avant de lancer le reste.

Le script peut être ajouté tout en bas du fichier wp-markdown.php ou functions.php . Supprimez à nouveau 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.

    
réponse donnée Stephen Harris 28.09.2012 - 14:34

Lire d'autres questions sur les étiquettes