How to prevent automatic conversion of dashes to –

When I put — into a post it is automatically converted to the – – character in the output by wordpress.

How can I get normal '--' double dashes in my content.

Related posts

Leave a Reply

4 comments

  1. I found a solution: If you are using WordPress, in the beginning of your file single.php add these lines:

    <?php
    remove_filter( 'the_title', 'wptexturize' );
    remove_filter( 'the_content', 'wptexturize' );
    remove_filter( 'the_excerpt', 'wptexturize' );
    ?>
    

    And do your test. I am 99.99% sure that will work because I had the same problem and I fixed it using that lines 10 seconds ago. 😉

  2. Another solution that override the origin function of wptexturize and update all related filters.

    define('EXCERPT_RARELY_2', '{[2}]');
    function wptexturize_custom($text = '')
    {
        $text = preg_replace('!(^|[^-])--([^-]|$)!', '$1' . EXCERPT_RARELY_2 . '$2', $text);
    
        // get through origin filter
        $text = wptexturize($text);
    
        return str_replace(EXCERPT_RARELY_2, '--', $text);
    }
    
    // remove default filter
    remove_filter('the_content', 'wptexturize');
    
    // add custom filter
    add_filter('the_content', 'wptexturize_custom');
    
    // remove default filter
    remove_filter('the_excerpt', 'wptexturize');
    
    // add custom filter
    add_filter('the_excerpt', 'wptexturize_custom');
    
  3. I had the same problem as the OP and the solution proposed by @TheDeadMedic almost worked for me.
    But my WP version has several function_something.php files and I had to add this to them all (making sure to add them after the php opening code <?php):

    remove_filter( 'the_title', 'wptexturize' );
    remove_filter( 'the_content', 'wptexturize' );
    remove_filter( 'the_excerpt', 'wptexturize' );
    

    Of course only one of them would be needed if you only want to remove the filter for titles, content or excerpt.