Support » Plugin: Markdown Shortcode » unwelcome side effects

  • Resolved Claude Vedovini



    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: and that inspired me to find a much better solution. Here’s the modified markdown_shortcode.php that I am using:

    $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

Viewing 2 replies - 1 through 2 (of 2 total)
Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘unwelcome side effects’ is closed to new replies.