WordPress.org

Ready to get started?Download WordPress

Forums

Problems in the_content filter and wpautop()? (4 posts)

  1. oan
    Member
    Posted 3 years ago #

    I tried to put a block element followed by some text in a list item. I thought the_content filter would generate a <p> element after the heading. And it did begin the paragraph, but it forgot to end it.

    I think the problem is somewhere in wpautop(). Here are some tests I did:

    echo wpautop("<ul><li><h2>Heading</h2></li></ul>"); // Correct output: <ul><li><h2>Heading</h2></li></ul>
    echo wpautop("<ul><li>Paragraph paragraph</li></ul>"); // Correct output?: <ul><li>Paragraph paragraph</li></ul>
    echo wpautop("<ul><li><h2>Heading</h2>Paragraph paragraph</li></ul>"); // STRANGE output: <ul><li><h2>Heading</h2><p>Paragraph paragraph</li></ul>
    echo wpautop("<ul><li><h2>Heading</h2>Paragraph paragraph\n</li></ul>"); // STRANGE output: <ul><li><h2>Heading</h2><p>Paragraph paragraph</li></ul>
    echo wpautop("<ul><li><h2>Heading</h2>Paragraph paragraph\r</li></ul>"); // STRANGE output: <ul><li><h2>Heading</h2><p>Paragraph paragraph</li></ul>
    echo wpautop("<ul><li><h2>Heading</h2>Paragraph paragraph\n\r</li></ul>"); // Correct output: <ul><li><h2>Heading</h2><p>Paragraph paragraph</p></li></ul>
    echo wpautop("<ul><li>Paragraph paragraph\n\rParagraph paragraph\n\r</li></ul>"); // STRANGE output: <ul><li>Paragraph paragraph</p><p>Paragraph paragraph</p></li></ul>

    Is this normal behavior?

  2. I believe so.

    Read http://codex.wordpress.org/Function_Reference/wpautop

    It doesn't wrap <p> tags, it does this:

    Changes double line-breaks in the text into HTML paragraphs (<p>...</p>).

  3. oriadam
    Member
    Posted 3 years ago #

    But it doesn't even do that.
    On the first 3 lines it added a <p> with no </p>
    and on the last line it added a </p> with no <p> to begin with
    That is not correct HTML, and not valid. It is a bug.

  4. Mark / t31os
    Moderator
    Posted 3 years ago #

    The content is run through more then one filter, if you're going to critique the output at least apply all the filters so you have an accurate output..

    A method for doing that would be..

    apply_filters( 'the_content', '<span>Your test markup</span>' );

    A list of the filters that are applied to content..

    add_filter( 'the_content', 'wptexturize'        );
    add_filter( 'the_content', 'convert_smilies'    );
    add_filter( 'the_content', 'convert_chars'      );
    add_filter( 'the_content', 'wpautop'            );
    add_filter( 'the_content', 'shortcode_unautop'  );
    add_filter( 'the_content', 'prepend_attachment' );

    Here's the same test with all filters applied..

    echo ( apply_filters( 'the_content',"<ul><li><h2>Heading</h2></li></ul>" ) );
    echo ( apply_filters( 'the_content',"<ul><li>Paragraph paragraph</li></ul>" ) );
    echo ( apply_filters( 'the_content',"<ul><li><h2>Heading</h2>Paragraph paragraph</li></ul>" ) );
    echo ( apply_filters( 'the_content',"<ul><li><h2>Heading</h2>Paragraph paragraph\n</li></ul>" ) );
    echo ( apply_filters( 'the_content',"<ul><li><h2>Heading</h2>Paragraph paragraph\r</li></ul>" ) );
    echo ( apply_filters( 'the_content',"<ul><li><h2>Heading</h2>Paragraph paragraph\n\r</li></ul>" ) );
    echo ( apply_filters( 'the_content',"<ul><li>Paragraph paragraph\n\rParagraph paragraph\n\r</li></ul>" ) );

    And the output..

    <ul> <li> <h2>Heading</h2> </li> </ul>
    <ul> <li>Paragraph paragraph</li> </ul>
    <ul> <li> <h2>Heading</h2> <p>Paragraph paragraph</li> </ul>
    <ul> <li> <h2>Heading</h2> <p>Paragraph paragraph </li> </ul>
    <ul> <li> <h2>Heading</h2> <p>Paragraph paragraph </li> </ul>
    <ul> <li> <h2>Heading</h2> <p>Paragraph paragraph</p> </li> </ul>
    <ul> <li>Paragraph paragraph</p> <p>Paragraph paragraph</p> </li> </ul>

    The 3rd, 4th and 5th are off (that's with the "WordPress should close invalidly nested elements option enabled"), but the others are correct.

    All that said, i'd personally go so far as to say a list is an inappropriate place to putting heading elements anyway, and the editor shouldn't really be blamed for not correctly formatting what it is(imho) incorrectly structured content.. (although i couldn't find anything specifically in the HTML specification that forbids it).

    Please do post up sample HTML that you're having specific problems with though, i'd be interested to see the specific HTML you're finding issues with.

Topic Closed

This topic has been closed to new replies.

About this Topic