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。
如果在运行此脚本之前手动删除筛选器,请确保再次替换它们。