WordPress.org

Ready to get started?Download WordPress

Forums

List category posts
TrueThemes, [raw] tags, and wordpress wrapping with paragraph tags (4 posts)

  1. Web2Guru
    Member
    Posted 1 year ago #

    So I know this issue is unique to a specific theme, Karma, and probably other themes by TrueThemes. They say to put [raw][/raw] tags around any third-party shortcodes so that WordPress does not add paragraph tags and line breaks, however this does not work.

    It seems that if I add your shortcode, their shortcodes break. One of their separator shortcodes works partially, but has the [raw] tags around it and is not positioned properly. If I try to put [raw] tags around your shortcode, the only change is that the [raw] tags are displayed on the page. Either way, WordPress adds paragraph tags in your shortcode's output and this limits the ability to customize the design.

    Fortunately, I can get rid of the [raw] tags by simply not using their shortcodes. I copied their shortcode output and used it instead, and didn't put [raw] tags around your shortcode. This works fairly well, I can manage it, but it seems the [raw] tags would be useful here since WordPress is messing with your shortcodes output.

    Any ideas what the problem could be? Conflicting attempts to thwart WordPress's paragraphs?

    In case it helps, here is the custom template I am using:

    $lcp_display_output = '';
    $lcp_display_output .= $this->get_category_link('strong');
    $lcp_display_output .= '<ul class="lcp_catlist">';
    foreach ($this->catlist->get_categories_posts() as $single):
        $lcp_display_output .= "<li>";
        $lcp_display_output .= '<h3>'.$single->post_title.'</h3>';
        $lcp_display_output .= '<span class="img_wrapper">'.$this->get_thumbnail($single).'</span>';
        $lcp_display_output .= $this->get_content($single, 'p', 'lcp_content');
        $lcp_display_output .= '</li>';
    endforeach;
    $lcp_display_output .= '</ul>';
    $this->lcp_output = $lcp_display_output;

    ...and this is how a post comes out:

    <li>
      <h3>The Title</h3>
      <span class="img_wrapper">
        <a href="POST_URL">
          <img src="IMAGE_URL">
        </a>
      </span>
      <p class="lcp_content"></p>
      <p>The Content</p>
      <p></p>
    </li>

    http://wordpress.org/extend/plugins/list-category-posts/

  2. Web2Guru
    Member
    Posted 1 year ago #

    So with a little testing, the obvious problem was applying filters to the content. I commented that out of the Catlist.php, line 292, and now it all works perfectly, [raw] tags and all.

    Some additional info, here is the shortcode I am using:

    [catlist name=my-category content=yes thumbnail=yes template=my-template]
  3. Web2Guru
    Member
    Posted 1 year ago #

    Ok, another update. The downside to commenting out the filters is that now content that consists of multiple paragraphs all runs together (as would be expected).

    So instead of wrapping the content in paragraph tags, I changed it to div tags.

    $lcp_display_output .= $this->get_content($single, 'div', 'lcp_content');

    Now the paragraphs and all the html comes out correctly with filters applied, but the [raw] tags are still displayed around both their separator shortcode's output and your shortcode's output.

    Any idea what causes this?

  4. Web2Guru
    Member
    Posted 1 year ago #

    So I have narrowed it down to some conflict with the themes [raw] tags, which are used to stop wpautop from messing with their shortcode output, and when the plugin applies filters to the post content.

    Here is the code they have used for their [raw] tags:

    function my_formatter($content) {
    	$new_content = '';
    	$pattern_full = '{(\[raw\].*?\[/raw\])}is';
    	$pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
    	$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);
    
    	foreach ($pieces as $piece) {
    		if (preg_match($pattern_contents, $piece, $matches)) {
    			$new_content .= $matches[1];
    		} else {
    			$new_content .= wptexturize(wpautop($piece));
    		}
    	}
    
    	return $new_content;
    }
    
    remove_filter('the_content', 'wpautop');
    remove_filter('the_content', 'wptexturize');
    add_filter('the_content', 'my_formatter', 99);

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic