Viewing 15 replies - 1 through 15 (of 16 total)
  • Plugin Author Mike

    (@conjur3r)

    Are you using auto insertion or the [toc] shortcode?

    My current thought would be the “show all blogposts” shortcode is using WP_Query coupled with the_post to create its listings. Doing so is fine but it must be followed by wp_reset_postdata to restore the current page’s request (ref).

    If this is the case then when the real the_content triggers, TOC+ is not being presented the correct content for the page. Just a guess at this stage – I don’t have the theme and there is no free version to verify but you should be able to provide this train of thought to the authors to follow through?

    Plugin Author Mike

    (@conjur3r)

    I checked your support thread and can see that the suggestion had been made to use wp_reset_postdata. The thing is, this needs to be at the bottom of the function call, not at the top. The extract part normally happens before the grunt of the shortcode magic occurs.

    function shortcode_abcd( $atts )
    {
      ...
      ...
      wp_reset_postdata();
      return ...
    }

    Thread Starter wp-fan

    (@wp-fan)

    Hello Michael,

    Are you using auto insertion or the [toc] shortcode?

    I am using the [toc] shortcode.

    In the function, there is also a ‘wp_reset_query();’

    I have tried inserting `wp_reset_postdata(); before, after and without it, no change yet.

    The code of the whole function looks like this:

    function _blog_shortcode( $args = array() ) {
    		global $post, $wp_rewrite, $wp_query, $mysite;
    
    		extract( $args['atts'] );
    
    		$out = '';
    
    		$showposts = trim( $showposts );
    		$column = ( !empty( $column ) ) ? trim( $column ) : '3';
    		$thumb = ( !empty( $thumb ) ) ? trim( $thumb ) : 'medium';
    		$offset = ( isset( $offset ) ) ? trim( $offset ) : '';
    		$post_in = ( !empty($post_in) ) ? explode(",", trim( $post_in )) : '';
    		$category_in = ( !empty($category_in) ) ? explode(",", trim( $category_in )) : '';
    		$tag_in = ( !empty($tag_in) ) ? explode(",", trim( $tag_in )) : '';
    
    		if( is_front_page() ) {
    			$_layout = mysite_get_setting( 'homepage_layout' );
    			$images = ( $_layout == 'full_width' ? 'images' : ( $_layout == 'left_sidebar' ? 'small_sidebar_images' : 'big_sidebar_images' ) );
    		} else {
    			$post_obj = $wp_query->get_queried_object();
    			$_layout = get_post_meta( $post_obj->ID, '_layout', true );
    			$template = get_post_meta( $post_obj->ID, '_wp_page_template', true );
    			$images = ( $_layout == 'full_width' ? 'images' : ( $_layout == 'left_sidebar' || $template == 'template-featuretour.php' ? 'small_sidebar_images' : 'big_sidebar_images' ) );
    		}
    
    		$post_img = '';
    
    		$blog_query = new WP_Query();
    
    		if( trim( $pagination ) == 'true' ) {
    
    			if( is_numeric( $offset ) ) {
    				$mysite->offset = $offset;
    				$mysite->posts_per_page = $showposts;
    				add_filter('post_limits', 'my_post_limit');
    			}
    
    			$paged = mysite_get_page_query();
    			$blog_query->query(array(
    				'post__in' => $post_in,
    				'category__in' => $category_in,
    				'tag__in' => $tag_in,
    				'post_type' => 'post',
    				'posts_per_page' => $showposts,
    				'paged' => $paged,
    				'offset' => $offset,
    				'ignore_sticky_posts' => 1
    			));
    
    		} else {
    
    			$blog_query->query(array(
    				'post__in' => $post_in,
    				'category__in' => $category_in,
    				'tag__in' => $tag_in,
    				'post_type' => 'post',
    				'showposts' => $showposts,
    				'nopaging' => 0,
    				'offset' => $offset,
    				'ignore_sticky_posts' => 1
    			));
    		}
    
    		if( $blog_query->have_posts() ) :
    
    		$img_sizes = $mysite->layout[$images];
    		$width = '';
    		$height = '';
    
    		if( $args['type'] == 'blog_grid' ) {
    			switch( $column ) {
    				case 1:
    					$main_class = 'post_grid one_column_blog';
    					$post_class = 'post_grid_module';
    					$content_class = 'post_grid_content';
    					$img_class = 'post_grid_image';
    					$excerpt_lenth = 400;
    					$width = $img_sizes['one_column_blog'][0];
    					$height = $img_sizes['one_column_blog'][1];
    					break;
    				case 2:
    					$main_class = 'post_grid two_column_blog';
    					$post_class = 'post_grid_module';
    					$content_class = 'post_grid_content';
    					$img_class = 'post_grid_image';
    					$column_class = 'one_half';
    					$excerpt_lenth = 150;
    					$width = $img_sizes['two_column_blog'][0];
    					$height = $img_sizes['two_column_blog'][1];
    					break;
    				case 3:
    					$main_class = 'post_grid three_column_blog';
    					$post_class = 'post_grid_module';
    					$content_class = 'post_grid_content';
    					$img_class = 'post_grid_image';
    					$column_class = 'one_third';
    					$excerpt_lenth = 75;
    					$width = $img_sizes['three_column_blog'][0];
    					$height = $img_sizes['three_column_blog'][1];
    					break;
    				case 4:
    					$main_class = 'post_grid four_column_blog';
    					$post_class = 'post_grid_module';
    					$content_class = 'post_grid_content';
    					$img_class = 'post_grid_image';
    					$column_class = 'one_fourth';
    					$excerpt_lenth = 50;
    					$width = $img_sizes['four_column_blog'][0];
    					$height = $img_sizes['four_column_blog'][1];
    					break;
    			}
    
    		} else {
    
    			if( $args['type'] == 'blog_list' ) {
    				switch( $thumb ) {
    					case 'small':
    						$main_class = 'post_list small_post_list';
    						$post_class = 'post_list_module';
    						$content_class = 'post_list_content';
    						$img_class = 'post_list_image';
    						$excerpt_lenth = 180;
    						$width = $img_sizes['small_post_list'][0];
    						$height = $img_sizes['small_post_list'][1];
    						break;
    					case 'medium':
    						$main_class = 'post_list medium_post_list';
    						$post_class = 'post_list_module';
    						$content_class = 'post_list_content';
    						$img_class = 'post_list_image';
    						$excerpt_lenth = 180;
    						$width = $img_sizes['medium_post_list'][0];
    						$height = $img_sizes['medium_post_list'][1];
    						break;
    					case 'large':
    						$main_class = 'post_list large_post_list';
    						$post_class = 'post_list_module';
    						$content_class = 'post_list_content';
    						$img_class = 'post_list_image';
    						$excerpt_lenth = 180;
    						$width = $img_sizes['large_post_list'][0];
    						$height = $img_sizes['large_post_list'][1];
    						break;
    				}
    			}
    		}
    
    		$filter_args = array( 'width' => $width, 'height' => $height, 'img_class' => $img_class, 'link_class' => 'blog_sc_image_load', 'preload' => ( isset( $mysite->mobile ) ? false : true ), 'post_content' => $post_content, 'disable' => $disable, 'column' => $column, 'thumb' => $thumb, 'type' => $args['type'], 'shortcode' => true, 'echo' => false );
    
    		$out .= ( $args['type'] == 'blog_grid' ) ? '<div class="' .  $main_class . '">' : '<ul class="' . $main_class . '">';
    
    		$i=1;
    		while( $blog_query->have_posts() ) : $blog_query->the_post();
    
    		$post_id = get_the_ID();
    
    		$video = get_post_meta( $post_id, '_featured_video', true);
    
    		if ( !empty( $video ) )
    			$filter_args = array_merge( array( 'video' => $video ), $filter_args );
    
    		$out .= ( $args['type'] == 'blog_list' ? '' : ( $column != 1 ? '<div class="' . ( $i%$column == 0 ? $column_class . ' last' : $column_class ) . '">' : '' ) );
    
    		$out .= ( $args['type'] == 'blog_grid' ) ? '<div class="' . join( ' ', get_post_class( $post_class, $post_id ) ) . '">' : '<li class="' . join( ' ', get_post_class( $post_class, $post_id ) ) . '">';
    
    		$out .= mysite_before_post_sc( $filter_args );
    
    		$out .= '<div class="' . $content_class . '">';
    
    		$out .= mysite_before_entry_sc( $filter_args );
    
    		$out .= '<div class="post_excerpt">';
    		if( strpos( $disable, 'content' ) === false ) {
    			ob_start();
    			mysite_post_content( $filter_args );
    			$out .= ob_get_clean();
    		}
    		$out .= '</div>';
    
    		$out .= mysite_after_entry_sc( $filter_args );
    
    		$out .= '</div><!-- .post_class -->';
    
    		$out .= ( $args['type'] == 'blog_grid' ) ? '</div>' : '</li>';
    
    		$out .= ( $args['type'] == 'blog_list' ? '' : ( $column != 1 ? '</div>' : '' ) );
    
    		if( $args['type'] == 'blog_grid' ) {
    			if( ( $i % $column ) == 0 )
    				$out .= '<div class="clearboth"></div>';
    		}
    
    		$i++;
    
    		endwhile;
    
    		$out .= ( $args['type'] == 'blog_grid' ) ? '</div>' : '</ul>';
    
    		if( $pagination == 'true' ) {
    			$out .= mysite_pagenavi( '', '', $blog_query );
    		}
    
    		endif;
    
    		if( ( is_numeric( $offset ) ) && ( trim( $pagination ) == 'true' ) )
    			remove_filter('post_limits', 'my_post_limit');
    
    		wp_reset_query();
    
    		return '<!--start_raw-->' . $out . '<!--end_raw-->';
    	}

    Any ideas?

    BTW, could this problem (ant its solution) have something to do with the issue I am describing?

    Plugin Author Mike

    (@conjur3r)

    I tried loading the code into a site but it referenced a few more things provided by the theme so didn’t get anywhere.

    To verify if the content for the page is changing, on line 1499 of the version 1303.1, add:

    var_dump($content);

    Reload your browser and see if it is printing out the content for the actual requested page or is it one of the post listings?

    Plugin Author Mike

    (@conjur3r)

    Also, I doubt you’ve got the same problem as that other person reported. It may be the same kinda problem (eg things altering the main query) but won’t have the same resolution.

    Thread Starter wp-fan

    (@wp-fan)

    Sorry my answer takes that long, I did not have proper internet access for a while.

    I added var_dump($content);to line 1499 of toc.php

    the “surrounding” of the code looks like this now:

    function the_content( $content )
    		{
    			global $post;
    			$items = $css_classes = $anchor = '';
    			$custom_toc_position = strpos($content, '<!--TOC-->');
    			$find = $replace = array();
    var_dump($content);
    			if ( $this->is_eligible($custom_toc_position) ) {

    Is this correct?

    Here are the results (I will not remove the variable until your next reaction in this thread):
    http://wp10600376.server-he.de/test-with-toc/
    http://wp10600376.server-he.de/test-with-toc-and-blog-shortcode/

    Kind regards,

    Thomas

    Plugin Author Mike

    (@conjur3r)

    I’ve copied the HTML for both pages so you can put it back to normal now.

    Have you used [no_toc] anywhere? What about in any of the articles it lists at the bottom?

    Checking the source code for the page that doesn’t work, I can see that <!--TOC--> is inserted at the top. This means that the shortcode part of TOC+ did actually trigger as it checks to see if it meets your criteria for insertion, then changes from [toc] to <!--TOC--> when it does.

    If you see this in the source, it means that the_content hasn’t been triggered properly. Perhaps the the_content filter may have been disabled, or it stopped continuing after the theme’s shortcode? Could you check with the theme developers to see if they are changing the execution flow in any way when using the ‘show all blogposts’ shortcode?

    Another test would be to use some other plugin that also makes use of the_content, such as Jetpack’s sharing buttons, or WP Socializer. Both of these add social media sharing buttons to the content.

    Thread Starter wp-fan

    (@wp-fan)

    Here is what the support has to say:

    We create a new WP_Query instance for the blog shortcodes so it shouldn’t be messing with the default query. The code can be found in /wp-content/themes/[your_theme]/lib/shortcodes/14-blog.php.

    I believe the only place we mess with the default query is in /wp-content/themes/[your_theme]/lib/functions/theme.php on lines 1480 – 1540.

    We exclude some categories that the user specifies on our blog page and then in the archive / search pages we exclude the same categories and set the post type to only posts.

    I can provide you with the full code. How could be do that? Email me via the test-site linked above?

    Plugin Author Mike

    (@conjur3r)

    What about these things:

    > Have you used [no_toc] anywhere? What about in any of the articles it lists at the bottom?

    > Another test would be to use some other plugin that also makes use of the_content, such as Jetpack’s sharing buttons, or WP Socializer. Both of these add social media sharing buttons to the content.

    Thread Starter wp-fan

    (@wp-fan)

    Sorry, I meant to answer those, but I was probably too tired and not concentrated.

    I have searched the code of the articles listed in the bottom in raw html editor. None of those have [no_toc] anywhere. Those who do not show a generated TOC do not qualify because they have don’t have the appropriate amount of headlines.

    I have activated Jetpack’s sharing buttons, please check if you find the behaviour or signs you are looking for.

    This article still has the TOC:
    http://wp10600376.server-he.de/test-with-toc/

    this one shows the sharing buttons beneath the listed articles in the bottom, but still no TOC:
    http://wp10600376.server-he.de/test-with-toc-and-blog-shortcode/

    Shall I provide you with the full code of the .php files the theme support mentions? If yes, please contact me through the website. And thanks for holding on to this matter for so long…

    Regards,

    Thomas

    Plugin Author Mike

    (@conjur3r)

    Hi Thomas

    Unfortunately that confirms that the theme, using the show all blogposts shortcode, is doing something with the main query loop as it is not printing out the sharing buttons for the actual page. The sharing buttons you see at the bottom are actually for the ‘Lernen in der Krise’ article. This is confirmed because the post list is surrounded by <!--start_raw--> and <!--end_raw-->. If it was behaving properly, there should have been some share buttons after <!--end_raw--> so you’ve just identified a problem with the theme.

    You’ll need to follow it up with the theme developers (particularly as you’ve purchased it) as it isn’t a problem with TOC+ nor with Jetpack nor anything else that uses the_content.

    Thread Starter wp-fan

    (@wp-fan)

    Hi Michael,

    thank you so much for your answer. I really very much appreciate your help here. I will forward this information to the theme developers.

    Would you allow one additional question to make sure I fully understand?

    You mention that

    Unfortunately that confirms that the theme, using the show all blogposts shortcode, is doing something with the main query loop as it is not printing out the sharing buttons for the actual page.

    On other pages and articles, I do see those sharing buttons:

    Article:
    http://wp10600376.server-he.de/zukunftskonferenz-moderator-teamentwicklung/

    Page:
    http://wp10600376.server-he.de/arbeitsfelder/

    Does your statement mean that the theme is presumably messing things up only when the “show category articles” shortcode is being used?

    Thanks for clarification. And let’s see what the developers at mysitemyway say.

    Kind regards,

    Thomas

    Plugin Author Mike

    (@conjur3r)

    Does your statement mean that the theme is presumably messing things up only when the “show category articles” shortcode is being used?

    Yep. If you require further confirmation, try other plugins (like WP Socializer) which uses the_content as well. WP Socializer adds buttons to the top of the page.

    Thread Starter wp-fan

    (@wp-fan)

    It seems like I am stuck in the middle of two dev teams….

    The mysitemyway support says:

    Our blog shortcode does not mess with the main query. I don’t know what else to tell you. I would try finding another plugin that does the same thing.

    What would you do in my shoes? Switch the theme? Try another TOC plugin? Leave wordpress as a whole? ;=)

    Sigh….

    Plugin Author Mike

    (@conjur3r)

    It may not mess with the main query, perhaps not triggering the_content, who knows? Essentially, if other plugins that use the_content don’t work under the same scenario, then it points at the theme. By all means try other TOC plugins.

    If I was in your shoes, I’d be experimenting with other plugins that use the_content and test. If they all don’t work, then that reaffirms a problem with the theme so either persevere with them or find combination that works for you (other plugins, or other themes).

    Another option may be to find a plugin that does post listings so you don’t have to use the theme’s shortcode. http://wordpress.org/extend/plugins/search.php?q=post+list

Viewing 15 replies - 1 through 15 (of 16 total)
  • The topic ‘Rendering problem with blog short code’ is closed to new replies.