Hi,
I just installed and started to use your plugin but I quickly discovered it was messing with the formatting on some pages even tho I don’t use the shortcode on those.
So I took look at the code and saw this:
remove_filter( 'the_content', 'wpautop' );
add_filter('the_content', 'wpautop' , 99);
add_filter('the_content', 'shortcode_unautop',100 );
So that means a lot of things that didn’t go through wpautop before are now being reformatted. That includes every shortcodes.
There’s a much better solution that I found here: https://bit.ly/1LM05R1 and that inspired me to find a much better solution. Here’s the modified markdown_shortcode.php that I am using:
include('parsedown/Parsedown.php');
include('parsedown/ParsedownExtra.php');
$markdown_shortcode_content = array();
function markdown_shortcode($attr, $content = null) {
global $markdown_shortcode_content;
$content = $markdown_shortcode_content[$content];
$content = undo_html_entities($content);
$content = trim($content);
$content = underscores_to_spaces($content);
$extra = new ParsedownExtra();
$parsed_content = $extra->text($content);
return $parsed_content;
}
add_shortcode('markdown', 'markdown_shortcode');
function markdown_shortcode_pre($attr, $content = null) {
global $markdown_shortcode_content;
$key = md5($content);
$markdown_shortcode_content[$key] = $content;
return "[markdown]{$key}[/markdown]";
}
function markdown_shortcode_preprocess($content) {
global $shortcode_tags;
// Backup current registered shortcodes and clear them all out
$orig_shortcode_tags = $shortcode_tags;
$shortcode_tags = array();
add_shortcode('markdown', 'markdown_shortcode_pre');
// Do the shortcode (only the one above is registered)
$content = do_shortcode($content);
// Put the original shortcodes back
$shortcode_tags = $orig_shortcode_tags;
return $content;
}
add_filter('the_content', 'markdown_shortcode_preprocess', 1);
// Reverts changes that were applied by the Visual editor
function undo_html_entities($content){
$content = str_replace("<", "<", $content);
$content = str_replace(">", ">", $content);
$content = str_replace("&", "&", $content);
return $content;
}
// Replaces more than one underscore to same amount of spaces
function underscores_to_spaces($content) {
$content = preg_replace_callback('/_{2,}/', function ($matches) {
return str_replace('_', ' ', $matches[0]);
}, $content);
return $content;
}
function init_highlight() {
wp_enqueue_style("highlight", plugin_dir_url(__FILE__) . 'highlight/styles/github.css');
wp_enqueue_script("highlight", plugin_dir_url(__FILE__) . 'highlight/highlight.min.js');
wp_enqueue_script("highlight_init", plugin_dir_url(__FILE__) . 'init_highlight.js');
}
add_action('init', 'init_highlight');
Also, I don’t know why you added that last part, the code doesn’t tell but I think you should at least document that side effect or just don’t do it if you can avoid it (I removed it).
// Stop WordPress converting quotes to pretty quotes (nobody will miss them)
remove_filter('the_content', 'wptexturize');
also, you should prefix all your methods with a unique prefix or use an object because you’re going to create conflicts.
Hope that helps
]]>