在我意识到有一个简单的解决方案可以用来在运行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“了解如何执行此操作的详细信息。