如何防止WordPress导入器在单个换行符中插入两个换行符?

时间:2018-12-29 作者:scott8035

使用标准导入帖子时WP Importer 插件,大多数用户会发现它改变了\\n\\n 到单个\\n. 当需要稍后显示帖子时,这将阻止wpautop() 从中包装连续段落<p>...</p> 标记,而不是用<br />.

1 个回复
SO网友:scott8035

在我意识到有一个简单的解决方案可以用来在运行WP Importer之前预处理导入XML文件之前,我在墙上撞了几个小时。解决方案是通过一个自行开发的过滤程序来运行该文件wpautop() 在内容有机会被插件吞食之前。

由于从输入XML中获取内容块有点乏味,我决定与社区共享我的代码,以启动下一次导入。代码和更长的解释位于“WordPress import with wpautop“。我将在此处包含PHP代码,以便在StackExchange中保存:

$accum  = 0;
$buffer = \'\';

while ( $line = fgets( STDIN ) ) {
    $line = preg_replace( \'/\\r\\n/\', "\\n", $line );
    $line = preg_replace( \'/\\r/\',   "\\n", $line );

    $start = false;
    $end   = false;
    if ( preg_match( \'/^\\s*<content:encoded><!\\[CDATA\\[/\', $line ) ) {
        $line = preg_replace( \'/^\\s*<content:encoded><!\\[CDATA\\[/\', \'\', $line ); 
        $start = true; 
    } 
    if ( preg_match( \'/\\]\\]><\\/content:encoded>\\s*$/i\', $line ) ) {
        $line = preg_replace( \'/\\]\\]><\\/content:encoded>\\s*$/i\', \'\', $line );
        $end = true;
    }

    if ( $start && $end ) {
        echo $line;
    } elseif ( $start ) {
        $accum = true;
        $buffer = $line;
    } elseif ( $end ) {
        $accum = false;
        $buffer .= $line;
        echo \'<content:encoded><![CDATA[\' . wpautop( $buffer ) . \']]></content:encoded>\';
    } else {
        if ( $accum ) {
            $buffer .= $line;
        } else {
            echo $line;
        }
    }
}

exit(0);
这项技术依赖于能够从普通的ol命令行程序中运行wpautop()。请参阅“Using WordPress in a non-interactive \'batch\' CLI process“了解如何执行此操作的详细信息。

相关推荐

为什么不能使用@IMPORT将父主题导入到子主题?

我对Wordpress有一些经验,但我已经离开了一段时间了。我见过很多在子主题的开头使用@import来导入父主题的例子。我读了很惊讶here 正确的方法是在函数内部使用wp\\u enqueue\\u样式。php而不是@import来加载父主题。我读了这页底部的解释,但没有真正理解。是否存在使用@import会导致性能下降的问题?使用适当的方法(如果有的话)浏览并更新我的主题,有什么切实的好处?