迁移Markdown(从Drupal)

时间:2012-09-22 作者:Martin Thompson

我正在将我的博客从Drupal迁移到Wordpress。我在最初的帖子中自由地使用了Markdown(和Geshi语法突出显示)。

在看到WP标记插件在保存(和编辑)时转换为HTML(和从HTML转换),所以我现在有一堆贴子显示标记为“on show”。

是否有一个API调用,我可以使用它在每篇文章上有效地执行“编辑并保存”操作,以强制对保存插件进行降价操作?

或者,我应该尝试另一种降价插件?

2 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

Note: 以下内容基本上未经测试(在一个帖子上测试后才生效)

正如您在编辑帖子时所指出的那样,该插件获取数据库中的内容(HTML),并将其转换为降价进行编辑。因为在您的案例中,内容实际上不是HTML格式,而是已经在降价中了,所以我们想阻止这种情况的发生。然后通过更新帖子,插件应该将标记转换为HTML。

这应该很容易做到,因为这种解析只是挂接到一些过滤器上,您只需删除适当的回调即可防止插件执行任何操作。(然后,given the class structure of the plug-in, maybe its not quite so easy). 有鉴于此,您可能只希望手动编辑插件文件以删除过滤器。

有问题的过滤器是added here.

add_filter( \'edit_post_content\', array( $this, \'wpautop\' ), 10, 2 );
add_filter( \'edit_post_content\', array( $this, \'edit_post_content\' ), 10, 2 );
删除这些内容(手动或其他方式),然后更新每个帖子应该可以。但这可能需要一段时间,所以让我们去寻找一个自动化的解决方案。。。

   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);
您应该先用一篇文章测试这个脚本,以检查它是否正常工作,然后再运行其余的文章。

可以将脚本添加到wp-markdown.php 文件或functions.php. Remove again after use. 要触发脚本,只需附加?markdown=correct 到管理员url。

如果在运行此脚本之前手动删除筛选器,请确保再次替换它们。

SO网友:Foliovision

将降价数据库从另一个CMS迁移到WordPress最简单的方法就是安装Robin Adrianse的Parsedown for WordPress. 在这种情况下,不需要转换任何内容。你的帖子已经准备好了,可以像你最初写的那样继续了,如果你使用了,还可以加上降价脚注(WordPress的Parsedown包括非常有用的Markdown Extra extensions 来自米歇尔·福特林(Michel Fortrin),其中大部分都加入了Github风味特价)。

如果您希望在WordPress中使用Markdown作为主要标记语言,则必须启用Classic Editor禁用Gutenberg。我强烈建议只在纯文本编辑器中进行编辑,因为这样可以避免进行换行分析and 从根本上提高了性能(纯文本字段)。在4.9到5.8版本的任何WordPress上,这种组合对我来说都是一种享受。

所有帖子都被解析为降价(HTML仍然被解析为HTML是降价规范的一部分),但对于评论来说,它工作得很好。透明地支持标记或HTML注释。没有永久转换的内容。您输入的任何内容都会在显示时转换为HTML。如果您使用的是缓存插件(WordPress非常强制),那么就不会有性能问题,因为只要页面被缓存,解析后的标记就会被缓存为HTML。

我指定RobinAdrianse的Parsedown版本,因为还有其他几个版本做得太过分了,将HTML永久性地转换为Markdown。WordPress的Parsedown在WordPress 5.8和Classic Editor中运行良好,因此忽略任何版本警告。RobinAdrianse不再使用WordPress,因此不必担心不断更改的版本号(对于大多数自愿提供开放源代码的开发人员来说,这真是一件麻烦事)。

结束

相关推荐

允许用户编辑Markdown并显示HTML输出时出现问题(WordPress的WMD编辑器插件)

这是答案WMD Editor implementation for Wordpress.When the users writes a post everything is displayed OK:The problem is when the user clicks EDIT:HTML版本就是显示的版本(我认为这是一种正常的行为,因为WMD编辑器将文章的降价版本转换为HTML)。修复此问题的步骤是什么?或者有没有解决这个问题的新版本?(我检查了其他问题,但没有人给出具体的解决方案)。