WordPress.org

Ready to get started?Download WordPress

Forums

WP-PageNavi
Rel=Next Rel=Prev (6 posts)

  1. Reinharts
    Member
    Posted 2 years ago #

    Okay, I give up. I've been searching these 300+ threads and can't seem to find anyone adding rel=next and rel=prev to this plugin. Any help here? Can it be done? Seems easy enough but for the life of me can't find where to insert it.

    Thanks!

    http://wordpress.org/extend/plugins/wp-pagenavi/

  2. TimeSocket
    Member
    Posted 2 years ago #

    I actually just implemented this for my site. I wrote an article about how you can do it here:
    http://www.timesocket.com/technology/adding-rel-prev-next-wp-paginavi/

    This should be implemented in the plugin in my opinion.

  3. Reinharts
    Member
    Posted 2 years ago #

    Thanks for the reply!

    My code doesn't look like that:

    <?php
    
    /**
     * Template tag: Boxed Style Paging
     *
     * @param array $args:
     *	'before': (string)
     *	'after': (string)
     *	'options': (string|array) Used to overwrite options set in WP-Admin -> Settings -> PageNavi
     *	'query': (object) A WP_Query instance
     */
    function wp_pagenavi( $args = array() ) {
    	if ( !is_array( $args ) ) {
    		$argv = func_get_args();
    		$args = array();
    		foreach ( array( 'before', 'after', 'options' ) as $i => $key )
    			$args[ $key ] = $argv[ $i ];
    	}
    
    	$args = wp_parse_args( $args, array(
    		'before' => '',
    		'after' => '',
    		'options' => array(),
    		'query' => $GLOBALS['wp_query'],
    		'type' => 'posts'
    	) );
    
    	extract( $args, EXTR_SKIP );
    
    	$options = wp_parse_args( $options, PageNavi_Core::$options->get() );
    
    	$instance = new PageNavi_Call( $args );
    
    	list( $posts_per_page, $paged, $total_pages ) = $instance->get_pagination_args();
    
    	if ( 1 == $total_pages && !$options['always_show'] )
    		return;
    
    	$pages_to_show = absint( $options['num_pages'] );
    	$larger_page_to_show = absint( $options['num_larger_page_numbers'] );
    	$larger_page_multiple = absint( $options['larger_page_numbers_multiple'] );
    	$pages_to_show_minus_1 = $pages_to_show - 1;
    	$half_page_start = floor( $pages_to_show_minus_1/2 );
    	$half_page_end = ceil( $pages_to_show_minus_1/2 );
    	$start_page = $paged - $half_page_start;
    
    	if ( $start_page <= 0 )
    		$start_page = 1;
    
    	$end_page = $paged + $half_page_end;
    
    	if ( ( $end_page - $start_page ) != $pages_to_show_minus_1 )
    		$end_page = $start_page + $pages_to_show_minus_1;
    
    	if ( $end_page > $total_pages ) {
    		$start_page = $total_pages - $pages_to_show_minus_1;
    		$end_page = $total_pages;
    	}
    
    	if ( $start_page < 1 )
    		$start_page = 1;
    
    	$out = '';
    	switch ( intval( $options['style'] ) ) {
    		// Normal
    		case 1:
    			// Text
    			if ( !empty( $options['pages_text'] ) ) {
    				$pages_text = str_replace(
    					array( "%CURRENT_PAGE%", "%TOTAL_PAGES%" ),
    					array( number_format_i18n( $paged ), number_format_i18n( $total_pages ) ),
    				$options['pages_text'] );
    				$out .= "<span class='pages'>$pages_text</span>";
    			}
    
    			if ( $start_page >= 2 && $pages_to_show < $total_pages ) {
    				// First
    				$first_text = str_replace( '%TOTAL_PAGES%', number_format_i18n( $total_pages ), $options['first_text'] );
    				$out .= $instance->get_single( 1, 'first', $first_text, '%TOTAL_PAGES%' );
    			}
    
    			// Previous
    			if ( $paged > 1 && !empty( $options['prev_text'] ) )
    				$out .= $instance->get_single( $paged - 1, 'previouspostslink', $options['prev_text'] );
    
    			if ( $start_page >= 2 && $pages_to_show < $total_pages ) {
    				if ( !empty( $options['dotleft_text'] ) )
    					$out .= "<span class='extend'>{$options['dotleft_text']}</span>";
    			}
    
    			// Smaller pages
    			$larger_pages_array = array();
    			if ( $larger_page_multiple )
    				for ( $i = $larger_page_multiple; $i <= $total_pages; $i+= $larger_page_multiple )
    					$larger_pages_array[] = $i;
    
    			$larger_page_start = 0;
    			foreach ( $larger_pages_array as $larger_page ) {
    				if ( $larger_page < ($start_page - $half_page_start) && $larger_page_start < $larger_page_to_show ) {
    					$out .= $instance->get_single( $larger_page, 'smaller page', $options['page_text'] );
    					$larger_page_start++;
    				}
    			}
    
    			if ( $larger_page_start )
    				$out .= "<span class='extend'>{$options['dotleft_text']}</span>";
    
    			// Page numbers
    			$timeline = 'smaller';
    			foreach ( range( $start_page, $end_page ) as $i ) {
    				if ( $i == $paged && !empty( $options['current_text'] ) ) {
    					$current_page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['current_text'] );
    					$out .= "<span class='current'>$current_page_text</span>";
    					$timeline = 'larger';
    				} else {
    					$out .= $instance->get_single( $i, "page $timeline", $options['page_text'] );
    				}
    			}
    
    			// Large pages
    			$larger_page_end = 0;
    			$larger_page_out = '';
    			foreach ( $larger_pages_array as $larger_page ) {
    				if ( $larger_page > ($end_page + $half_page_end) && $larger_page_end < $larger_page_to_show ) {
    					$larger_page_out .= $instance->get_single( $larger_page, 'larger page', $options['page_text'] );
    					$larger_page_end++;
    				}
    			}
    
    			if ( $larger_page_out ) {
    				$out .= "<span class='extend'>{$options['dotright_text']}</span>";
    			}
    			$out .= $larger_page_out;
    
    			if ( $end_page < $total_pages ) {
    				if ( !empty( $options['dotright_text'] ) )
    					$out .= "<span class='extend'>{$options['dotright_text']}</span>";
    			}
    
    			// Next
    			if ( $paged < $total_pages && !empty( $options['next_text'] ) )
    				$out .= $instance->get_single( $paged + 1, 'nextpostslink', $options['next_text'] );
    
    			if ( $end_page < $total_pages ) {
    				// Last
    				$out .= $instance->get_single( $total_pages, 'last', $options['last_text'], '%TOTAL_PAGES%' );
    			}
    			break;
    
    		// Dropdown
    		case 2:
    			$out .= '<form action="" method="get">'."\n";
    			$out .= '<select size="1" onchange="document.location.href = this.options[this.selectedIndex].value;">'."\n";
    
    			foreach ( range( 1, $total_pages ) as $i ) {
    				$page_num = $i;
    				if ( $page_num == 1 )
    					$page_num = 0;
    
    				if ( $i == $paged ) {
    					$current_page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['current_text'] );
    					$out .= '<option value="'.esc_url( $instance->get_url( $page_num ) ).'" selected="selected" class="current">'.$current_page_text."</option>\n";
    				} else {
    					$page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['page_text'] );
    					$out .= '<option value="'.esc_url( $instance->get_url( $page_num ) ).'">'.$page_text."</option>\n";
    				}
    			}
    
    			$out .= "</select>\n";
    			$out .= "</form>\n";
    			break;
    	}
    	$out = $before . "<div class='wp-pagenavi'>\n$out\n</div>" . $after;
    
    	echo apply_filters( 'wp_pagenavi', $out );
    }
    
    class PageNavi_Call {
    
    	protected $args;
    
    	function __construct( $args ) {
    		$this->args = $args;
    	}
    
    	function __get( $key ) {
    		return $this->args[ $key ];
    	}
    
    	function get_pagination_args() {
    		global $numpages;
    
    		$query = $this->query;
    
    		switch( $this->type ) {
    		case 'multipart':
    			// Multipart page
    			$posts_per_page = 1;
    			$paged = max( 1, absint( get_query_var( 'page' ) ) );
    			$total_pages = max( 1, $numpages );
    			break;
    		case 'users':
    			// WP_User_Query
    			$posts_per_page = $query->query_vars['number'];
    			$paged = max( 1, floor( $query->query_vars['offset'] / $posts_per_page ) + 1 );
    			$total_pages = max( 1, ceil( $query->total_users / $posts_per_page ) );
    			break;
    		default:
    			// WP_Query
    			$posts_per_page = intval( $query->get( 'posts_per_page' ) );
    			$paged = max( 1, absint( $query->get( 'paged' ) ) );
    			$total_pages = max( 1, absint( $query->max_num_pages ) );
    			break;
    		}
    
    		return array( $posts_per_page, $paged, $total_pages );
    	}
    
    	function get_single( $page, $class, $raw_text, $format = '%PAGE_NUMBER%' ) {
    		if ( empty( $raw_text ) )
    			return '';
    
    		$text = str_replace( $format, number_format_i18n( $page ), $raw_text );
    
    		return "<a href='" . esc_url( $this->get_url( $page ) ) . "' class='$class'>$text</a>";
    	}
    
    	function get_url( $page ) {
    		return ( 'multipart' == $this->type ) ? get_multipage_link( $page ) : get_pagenum_link( $page );
    	}
    }
    
    # http://core.trac.wordpress.org/ticket/16973
    if ( !function_exists( 'get_multipage_link' ) ) :
    function get_multipage_link( $page = 1 ) {
    	global $post, $wp_rewrite;
    
    	if ( 1 == $page ) {
    		$url = get_permalink();
    	} else {
    		if ( '' == get_option('permalink_structure') || in_array( $post->post_status, array( 'draft', 'pending') ) )
    			$url = add_query_arg( 'page', $page, get_permalink() );
    		elseif ( 'page' == get_option( 'show_on_front' ) && get_option('page_on_front') == $post->ID )
    			$url = trailingslashit( get_permalink() ) . user_trailingslashit( $wp_rewrite->pagination_base . "/$page", 'single_paged' );
    		else
    			$url = trailingslashit( get_permalink() ) . user_trailingslashit( $page, 'single_paged' );
    	}
    
    	return $url;
    }
    endif;
    
    // Template tag: Drop Down Menu (Deprecated)
    function wp_pagenavi_dropdown() {
    	wp_pagenavi();
    }
    
    class PageNavi_Core {
    	static $options;
    
    	function init( $options ) {
    		self::$options = $options;
    
    		add_action( 'wp_print_styles', array( __CLASS__, 'stylesheets' ) );
    	}
    
    	function stylesheets() {
    		if ( !self::$options->use_pagenavi_css )
    			return;
    
    		if ( @file_exists( get_stylesheet_directory() . '/pagenavi-css.css' ) )
    			$css_file = get_stylesheet_directory_uri() . '/pagenavi-css.css';
    		elseif ( @file_exists( get_template_directory() . '/pagenavi-css.css' ) )
    			$css_file = get_template_directory_uri() . '/pagenavi-css.css';
    		else
    			$css_file = plugins_url( 'pagenavi-css.css', __FILE__ );
    
    		wp_enqueue_style( 'wp-pagenavi', $css_file, false, '2.70' );
    	}
    }

    Any ideas how I should modify mine? Yours looks different on the link.

  4. TimeSocket
    Member
    Posted 2 years ago #

    You only need to modify one function which is the get_single() function.

    Here is the full code for the core.php file:

    <?php
    
    /**
     * Template tag: Boxed Style Paging
     *
     * @param array $args:
     *      'before': (string)
     *      'after': (string)
     *      'options': (string|array) Used to overwrite options set in WP-Admin -> Settings -> PageNavi
     *      'query': (object) A WP_Query instance
     */
    function wp_pagenavi( $args = array() ) {
            if ( !is_array( $args ) ) {
                    $argv = func_get_args();
                    $args = array();
                    foreach ( array( 'before', 'after', 'options' ) as $i => $key )
                            $args[ $key ] = $argv[ $i ];
            }
    
            $args = wp_parse_args( $args, array(
                    'before' => '',
                    'after' => '',
                    'options' => array(),
                    'query' => $GLOBALS['wp_query'],
                    'type' => 'posts'
            ) );
    
            extract( $args, EXTR_SKIP );
    
            $options = wp_parse_args( $options, PageNavi_Core::$options->get() );
    
            $instance = new PageNavi_Call( $args );
    
            list( $posts_per_page, $paged, $total_pages ) = $instance->get_pagination_args();
    
            if ( 1 == $total_pages && !$options['always_show'] )
                    return;
    
            $pages_to_show = absint( $options['num_pages'] );
            $larger_page_to_show = absint( $options['num_larger_page_numbers'] );
            $larger_page_multiple = absint( $options['larger_page_numbers_multiple'] );
            $pages_to_show_minus_1 = $pages_to_show - 1;
            $half_page_start = floor( $pages_to_show_minus_1/2 );
            $half_page_end = ceil( $pages_to_show_minus_1/2 );
            $start_page = $paged - $half_page_start;
    
            if ( $start_page <= 0 )
                    $start_page = 1;
    
            $end_page = $paged + $half_page_end;
    
            if ( ( $end_page - $start_page ) != $pages_to_show_minus_1 )
                    $end_page = $start_page + $pages_to_show_minus_1;
    
            if ( $end_page > $total_pages ) {
                    $start_page = $total_pages - $pages_to_show_minus_1;
                    $end_page = $total_pages;
            }
    
            if ( $start_page < 1 )
                    $start_page = 1;
    
            $out = '';
            switch ( intval( $options['style'] ) ) {
                    // Normal
                    case 1:
                            // Text
                            if ( !empty( $options['pages_text'] ) ) {
                                    $pages_text = str_replace(
                                            array( "%CURRENT_PAGE%", "%TOTAL_PAGES%" ),
                                            array( number_format_i18n( $paged ), number_format_i18n( $total_pages ) ),
                                    $options['pages_text'] );
                                    $out .= "<span class='pages'>$pages_text</span>";
                            }
    
                            if ( $start_page >= 2 && $pages_to_show < $total_pages ) {
                                    // First
                                    $first_text = str_replace( '%TOTAL_PAGES%', number_format_i18n( $total_pages ), $options['first_text'] );
                                    $out .= $instance->get_single( 1, 'first', $first_text, '%TOTAL_PAGES%' );
                            }
    
                            // Previous
                            if ( $paged > 1 && !empty( $options['prev_text'] ) )
                                    $out .= $instance->get_single( $paged - 1, 'previouspostslink', $options['prev_text'] );
    
                            if ( $start_page >= 2 && $pages_to_show < $total_pages ) {
                                    if ( !empty( $options['dotleft_text'] ) )
                                            $out .= "<span class='extend'>{$options['dotleft_text']}</span>";
                            }
    
                            // Smaller pages
                            $larger_pages_array = array();
                            if ( $larger_page_multiple )
                                    for ( $i = $larger_page_multiple; $i <= $total_pages; $i+= $larger_page_multiple )
                                            $larger_pages_array[] = $i;
    
                            $larger_page_start = 0;
                            foreach ( $larger_pages_array as $larger_page ) {
                                    if ( $larger_page < ($start_page - $half_page_start) && $larger_page_start < $larger_page_to_show ) {
                                            $out .= $instance->get_single( $larger_page, 'smaller page', $options['page_text'] );
                                            $larger_page_start++;
                                    }
                            }
    
                            if ( $larger_page_start )
                                    $out .= "<span class='extend'>{$options['dotleft_text']}</span>";
    
                            // Page numbers
                            $timeline = 'smaller';
                            foreach ( range( $start_page, $end_page ) as $i ) {
                                    if ( $i == $paged && !empty( $options['current_text'] ) ) {
                                            $current_page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['current_text'] );
                                            $out .= "<span class='current'>$current_page_text</span>";
                                            $timeline = 'larger';
                                    } else {
                                            $out .= $instance->get_single( $i, "page $timeline", $options['page_text'] );
                                    }
                            }
    
                            // Large pages
                            $larger_page_end = 0;
                            $larger_page_out = '';
                            foreach ( $larger_pages_array as $larger_page ) {
                                    if ( $larger_page > ($end_page + $half_page_end) && $larger_page_end < $larger_page_to_show ) {
                                            $larger_page_out .= $instance->get_single( $larger_page, 'larger page', $options['page_text'] );
                                            $larger_page_end++;
                                    }
                            }
    
                            if ( $larger_page_out ) {
                                    $out .= "<span class='extend'>{$options['dotright_text']}</span>";
                            }
                            $out .= $larger_page_out;
    
                            if ( $end_page < $total_pages ) {
                                    if ( !empty( $options['dotright_text'] ) )
                                            $out .= "<span class='extend'>{$options['dotright_text']}</span>";
                            }
    
                            // Next
                            if ( $paged < $total_pages && !empty( $options['next_text'] ) )
                                    $out .= $instance->get_single( $paged + 1, 'nextpostslink', $options['next_text'] );
    
                            if ( $end_page < $total_pages ) {
                                    // Last
                                    $out .= $instance->get_single( $total_pages, 'last', $options['last_text'], '%TOTAL_PAGES%' );
                            }
                            break;
    
                    // Dropdown
                    case 2:
                            $out .= '<form action="" method="get">'."\n";
                            $out .= '<select size="1" onchange="document.location.href = this.options[this.selectedIndex].value;">'."\n";
    
                            foreach ( range( 1, $total_pages ) as $i ) {
                                    $page_num = $i;
                                    if ( $page_num == 1 )
                                            $page_num = 0;
    
                                    if ( $i == $paged ) {
                                            $current_page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['current_text'] );
                                            $out .= '<option value="'.esc_url( $instance->get_url( $page_num ) ).'" selected="selected" class="current">'.$current_page_text."</option>\n";
                                    } else {
                                            $page_text = str_replace( '%PAGE_NUMBER%', number_format_i18n( $i ), $options['page_text'] );
                                            $out .= '<option value="'.esc_url( $instance->get_url( $page_num ) ).'">'.$page_text."</option>\n";
                                    }
                            }
    
                            $out .= "</select>\n";
                            $out .= "</form>\n";
                            break;
            }
            $out = $before . "<div class='wp-pagenavi'>\n$out\n</div>" . $after;
    
            echo apply_filters( 'wp_pagenavi', $out );
    }
    
    class PageNavi_Call {
    
            protected $args;
    
            function __construct( $args ) {
                    $this->args = $args;
            }
    
            function __get( $key ) {
                    return $this->args[ $key ];
            }
    
            function get_pagination_args() {
                    global $numpages;
    
                    $query = $this->query;
    
                    switch( $this->type ) {
                    case 'multipart':
                            // Multipart page
                            $posts_per_page = 1;
                            $paged = max( 1, absint( get_query_var( 'page' ) ) );
                            $total_pages = max( 1, $numpages );
                            break;
                    case 'users':
                            // WP_User_Query
                            $posts_per_page = $query->query_vars['number'];
                            $paged = max( 1, floor( $query->query_vars['offset'] / $posts_per_page ) + 1 );
                            $total_pages = max( 1, ceil( $query->total_users / $posts_per_page ) );
                            break;
                    default:
                            // WP_Query
                            $posts_per_page = intval( $query->get( 'posts_per_page' ) );
                            $paged = max( 1, absint( $query->get( 'paged' ) ) );
                            $total_pages = max( 1, absint( $query->max_num_pages ) );
                            break;
                    }
    
                    return array( $posts_per_page, $paged, $total_pages );
            }
    
            function get_single( $page, $class, $raw_text, $format = '%PAGE_NUMBER%' ) {
                    if ( empty( $raw_text ) )
                            return '';
    
                    $text = str_replace( $format, number_format_i18n( $page ), $raw_text );
    
                    //return "<a href='" . esc_url( $this->get_url( $page ) ) . "' class='$class'>$text</a>";
    
                    if ( $class == "previouspostslink" ) { return "<link rel='prev' title='$text' href='" . esc_url( $this->get_url( $page ) ) . "' class='$class' />"; }
                    else if ( $class == "nextpostslink" ) { return "<link rel='next' title='$text' href='" . esc_url( $this->get_url( $page ) ) . "' class='$class' />"; }
                    else { return "<a href='" . esc_url( $this->get_url( $page ) ) . "' class='$class'>$text</a>"; }
            }
    
            function get_url( $page ) {
                    return ( 'multipart' == $this->type ) ? get_multipage_link( $page ) : get_pagenum_link( $page );
            }
    }
    
    # http://core.trac.wordpress.org/ticket/16973
    if ( !function_exists( 'get_multipage_link' ) ) :
    function get_multipage_link( $page = 1 ) {
            global $post, $wp_rewrite;
    
            if ( 1 == $page ) {
                    $url = get_permalink();
            } else {
                    if ( '' == get_option('permalink_structure') || in_array( $post->post_status, array( 'draft', 'pending') ) )
                            $url = add_query_arg( 'page', $page, get_permalink() );
                    elseif ( 'page' == get_option( 'show_on_front' ) && get_option('page_on_front') == $post->ID )
                            $url = trailingslashit( get_permalink() ) . user_trailingslashit( $wp_rewrite->pagination_base . "/$page", 'single_paged' );
                    else
                            $url = trailingslashit( get_permalink() ) . user_trailingslashit( $page, 'single_paged' );
            }
    
            return $url;
    }
    endif;
    
    // Template tag: Drop Down Menu (Deprecated)
    function wp_pagenavi_dropdown() {
            wp_pagenavi();
    }
    
    class PageNavi_Core {
            static $options;
    
            function init( $options ) {
                    self::$options = $options;
    
                    add_action( 'wp_print_styles', array( __CLASS__, 'stylesheets' ) );
            }
    
            function stylesheets() {
                    if ( !self::$options->use_pagenavi_css )
                            return;
    
                    if ( @file_exists( get_stylesheet_directory() . '/pagenavi-css.css' ) )
                            $css_file = get_stylesheet_directory_uri() . '/pagenavi-css.css';
                    elseif ( @file_exists( get_template_directory() . '/pagenavi-css.css' ) )
                            $css_file = get_template_directory_uri() . '/pagenavi-css.css';
                    else
                            $css_file = plugins_url( 'pagenavi-css.css', __FILE__ );
    
                    wp_enqueue_style( 'wp-pagenavi', $css_file, false, '2.70' );
            }
    }
  5. Reinharts
    Member
    Posted 2 years ago #

    Hey There!
    Thank you so so much for helping me.

    When I use that code the << and >> just go away. I'm left with only numbers. I still see the code <link rel="next... etc but there is no box with a << and >> in them to indicate left and right. Any idea why it might do that?
    Screen Shot:

    http://i.imgur.com/fYTuC.jpg

    And here is what its supposed to look like:

    http://i.imgur.com/NSUHn.jpg

    Not sure why your code on your blog is different and the one you gave me seems to be breaking something. Im using the latest version! Anyway.. thanks again.

  6. TimeSocket
    Member
    Posted 2 years ago #

    Looks like I overlooked that and the code wasn't working properly. I did figure out how to fix it with but after reviewing http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html, I realized that the link rel tags must be placed in the <head> section of the page rather than the <body> so this would not be a good solution.

    I saw the following article http://yoast.com/rel-next-prev-paginated-archives/ and it looks like their SEO plugin has the ability to add these to the <head> section.

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic

Tags

No tags yet.