Migrar Markdown (desde Drupal)

4

Estoy en el proceso de migrar mi blog de Drupal a Wordpress. He hecho un uso liberal de Markdown en las publicaciones originales (y el resaltado de sintaxis Geshi).

En ver que el complemento WP-Markdown se convierte a (y de HTML) en guardar (y editar), por lo que ahora tengo un montón de publicaciones que aparecen con el Markdown 'on show'.

¿Hay una llamada a la API que puedo usar para realizar de manera efectiva una operación de 'editar y guardar' en cada publicación para forzar que Markdown en el complemento Guardar funcione en todas ellas?

O alternativamente, ¿debería probar un complemento diferente de Markdown?

    
pregunta Martin Thompson 22.09.2012 - 13:21

1 respuesta

6

Nota: Lo siguiente está en gran parte sin probar (Funcionó después de la prueba en una publicación).

Como ha señalado cuando edita una publicación, el complemento toma el contenido de la base de datos (HTML) y lo convierte en MarkDown para su edición. Ya que en su caso el contenido no está en HTML, pero ya está en MarkDown, queremos evitar que esto suceda. Luego, al actualizar la publicación, el complemento debe convertir MarkDown a HTML.

Esto debería ser bastante fácil de hacer, ya que este análisis solo está conectado a algunos filtros, simplemente elimine las devoluciones de llamada adecuadas para evitar que el complemento haga algo. (Entonces, nuevamente, dada la estructura de clases del plug-in, tal vez no sea tan fácil ). Dado esto, es posible que solo desee editar manualmente los archivos de complementos para eliminar los filtros.

Los filtros en cuestión son agregado aquí .

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

Eliminar esos (manualmente o de otra manera) y luego actualizar cada una de las publicaciones debería funcionar. Pero eso podría llevar un tiempo, así que vamos por una solución automatizada ...

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

Debería probar este script con una de sus publicaciones primero para comprobar que funciona antes de ejecutar el resto.

El script se puede agregar al final del archivo wp-markdown.php o functions.php . Eliminar de nuevo después de su uso . Para activar el script, simplemente agregue ?markdown=correct a una url de administrador.

Si elimina manualmente los filtros antes de ejecutar este script, asegúrese de reemplazarlos nuevamente.

    
respondido por el Stephen Harris 28.09.2012 - 14:34

Lea otras preguntas en las etiquetas