WordPress.org

Ready to get started?Download WordPress

Forums

qTranslate
Pagination issue with qTranslate (9 posts)

  1. christian70
    Member
    Posted 1 year ago #

    I've been using qTranslate plugin for a long time and it usually works perfectly, with few well-known tricks. This time I'm coding to display all posts from a category with pagination by adding get_previous_posts_link() and get_next_posts_link() to browser among pages. It works fine with default language but it fails after switching to the second language. I'm using custom permalink structure (/%category%/%postname%/): if on local XAMPP server the link in default language is i.e. http://localhost/www/site-root/category/category-x/page/2/, the translated link should be like http://localhost/www/site-root/en/category/category-x/page/2/ but otherwise it is http://localhost/www/site.root/en/www/site-root/category/category-x/page/2/ and it obviously gives error.
    I can't fix it this wierd behaviour. Even trying some filters I found. Thinking of making pagination with jQuery but I'd prefere to keep native wordpress functionality. Please, any suggestion will be appreciated.

    http://wordpress.org/extend/plugins/qtranslate/

  2. gojak
    Member
    Posted 1 year ago #

    Hi,
    I have similar problem with free Max Magazine theme. This is what I did to fix pagination on home page displaying recent posts. I have changed default function.php part:

    $paginate_links = paginate_links( array(
    		'base' => str_replace( $big, '%#%', get_pagenum_link($big) ),
    		'current' => max( 1, get_query_var('paged') ),
    		'total' => $wp_query->max_num_pages,
    		'mid_size' => 5,
    		'add_fragment' => ''
    	) );

    with this:

    if(qtrans_getLanguage() == 'de')
    	$paginate_links = paginate_links( array(
    		'base' => str_replace( $big, '../../../page/%#%', get_pagenum_link($big) ),
    		'current' => max( 1, get_query_var('paged') ),
    		'total' => $wp_query->max_num_pages,
    		'mid_size' => 5,
    		'add_fragment' => ''
    	) );
    
       else if(qtrans_getLanguage() == "en")
    $paginate_links = paginate_links( array(
    		'base' => str_replace( $big, '%#%', get_pagenum_link($big) ),
    		'current' => max( 1, get_query_var('paged') ),
    		'total' => $wp_query->max_num_pages,
    		'mid_size' => 5,
    		'add_fragment' => ''
    	) );

    However, this doesn't effect category page pagination and archives page pagination. Don't know why, I am still researching.

  3. gojak
    Member
    Posted 1 year ago #

    This was a bad solution since it is not a fix... it is something... :)

    It seems that qTranslate multi language pagination is not displaying 4o4 links (at least for me) when permalinks are set to default (?p=123). Interesting thing is that with default permalinks qTranslate only works in Query Mode (?lang=en). The bad thing is that pagination is still broken for the other language, in category it displays pagination for all posts instead for that cat only.
    On a category page default language(en) pagination works just fine on all settings.

  4. gojak
    Member
    Posted 1 year ago #

    Weirdest thing is that after reactivating plugin a couple of times pagination works normal except when I click on page number 1 on category page after switching to page 2 or 3,it resets language to default one. It seems that qTranslate still needs a couple of more fixes...

    Cheers

  5. gojak
    Member
    Posted 1 year ago #

    When I use this pagination works except when I click on pagination no 1, then it resets language:

    function mytheme_pagination() {
    	global $wp_query;
    
    	$big = 999999999; // This needs to be an unlikely integer
    
    	// For more options and info view the docs for paginate_links()
    	// http://codex.wordpress.org/Function_Reference/paginate_links
    	$paginate_links = paginate_links( array(
    		'base' => str_replace( $big, '%#%', get_pagenum_link($big) ),
    		'current' => max( 1, get_query_var('paged') ),
    		'total' => $wp_query->max_num_pages,
    		'mid_size' => 5
    	) );
    
    	// Display the pagination if more than one page is found
    	if ( $paginate_links ) {
    		echo '<div class="pagination">';
    		echo $paginate_links;
    		echo '</div><!--// end .pagination -->';
    	}
    }

    When I use this, pagination works only on pagination 1, for all others (2, 3,4...) it resets language:

    /*
     * Pagination for archive, taxonomy, category, tag and search results pages
     */ 
    
    function mytheme_pagination() {
        global $wp_query;  
    
        $total_pages = $wp_query->max_num_pages;  
    
        if ($total_pages > 1){  
    
          $current_page = max(1, get_query_var('paged'));  
    
          echo '<div class="pagination">';  
    
          echo paginate_links(array(
              'base' => get_pagenum_link(1) . '%_%',
              'format' => '/page/%#%',
              'current' => $current_page,
              'total' => $total_pages,
              'prev_text' => 'Prev',
              'next_text' => 'Next'
            ));  
    
          echo '</div>';  
    
        }  }

    Anyone? Thanks!

  6. gojak
    Member
    Posted 1 year ago #

    I managed to create pagination that works with qTranslate, it doesn't resets language to a default one.

    function mytheme_pagination($pages = '', $range = 999)
    { 
    
     global $paged; if(empty($paged)) $paged = 1;
     if($pages == '')
     {
     global $wp_query; $pages = $wp_query->max_num_pages; if(!$pages)
     { $pages = 1; }
     }
     if(1 != $pages)
     {
     echo "<div class='pagination'>";
     if($paged > 1 && $showitems < $pages) echo "<a  href='".get_pagenum_link($paged - 1)."' class='page-numbers'>&lsaquo; Previous</a>";
     for ($i=1; $i <= $pages; $i++)
     {
     if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
     {
     echo ($paged == $i)? "<li class='page-numbers'><span class='current'>".$i."</span></li>":"<a  href='".get_pagenum_link($i)."' class='page-numbers'>".$i."</a>";
     }
     }
     if ($paged < $pages && $showitems < $pages) echo "<a  href='".get_pagenum_link($paged + 1)."' class='page-numbers'>Next &rsaquo;</a>";
    
     echo "</div>";
     }
     }

    I am designer - not a coder, so any suggestions to this code would be appreciated.

    Cheers!

  7. nekomeo
    Member
    Posted 1 year ago #

    I'm working on a website on localhost and I've just got the problem

    I've added this in functions.php

    add_filter('get_pagenum_link', 'qtranslate_next_previous_fix');
    
    function qtranslate_next_previous_fix($url) {
    	$aUrl = explode("/".qtrans_getLanguage(),$url);
    	return qtrans_convertURL($aUrl[1]);
    }

    It seems to fix the bug (at least in my case)

  8. nekomeo
    Member
    Posted 1 year ago #

    Problem with default language, this seems better:

    add_filter('get_pagenum_link', 'qtranslate_next_previous_fix');
    
    function qtranslate_next_previous_fix($url) {
    	$aUrl = explode("/".qtrans_getLanguage(),$url);
    	if (isset($aUrl[1]))
    		$url=qtrans_convertURL($aUrl[1]);
    	return $url;
    }
  9. Buriburu
    Member
    Posted 1 year ago #

    Nekomeo, You have to know that I really love you!
    You saved me!

    Your fix works perfectly!

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic

Tags

No tags yet.