Migrando Markdown (do Drupal)

4

Estou no processo de migrar meu blog do Drupal para o Wordpress. Eu fiz uso liberal do Markdown nos posts originais (e destaque da sintaxe do Geshi).

Em que o plug-in WP-Markdown é convertido para (e de HTML) em salvar (e editar), agora tenho várias postagens que aparecem com o Markdown 'em exibição'.

Existe uma chamada de API que eu possa usar para efetivamente fazer uma operação de "editar e salvar" em cada post para forçar o plug-in Markdown on Save a operar em todos eles?

Ou, como alternativa, um plugin Markdown diferente que eu deveria tentar?

    
por Martin Thompson 22.09.2012 / 13:21

1 resposta

6

Observação: O seguinte não foi testado (funcionou após o teste em um post).

Como você apontou quando edita uma postagem, o plug-in coleta o conteúdo no banco de dados (HTML) e o converte em MarkDown para edição. Já que no seu caso o conteúdo não está em HTML, mas no MarkDown, queremos impedir que isso aconteça. Em seguida, atualizando a postagem, o plug-in deve converter o MarkDown em HTML.

Isto deve ser bastante fácil de fazer, já que esta análise é apenas conectada a alguns filtros, você simplesmente remove os callbacks apropriados para evitar que o plug-in faça qualquer coisa. (Então, novamente, dada a estrutura de classe do plug-in, talvez não seja tão fácil . Dado isso, você pode apenas querer editar manualmente os arquivos de plug-in para remover os filtros.

Os filtros em questão são adicionados aqui .

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

Remover esses (manualmente ou não) e atualizar cada uma das postagens deve funcionar. Mas isso pode demorar um pouco, então vamos para uma solução 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);

Você deve testar este script com uma de suas postagens primeiro para verificar se ele funciona antes de executar o restante.

O script pode ser adicionado à parte inferior do arquivo wp-markdown.php ou functions.php . Remova novamente após o uso . Para acionar o script, basta anexar ?markdown=correct a uma URL de administrador.

Se você remover manualmente os filtros antes de executar esse script, substitua-os novamente.

    
por Stephen Harris 28.09.2012 / 14:34