Ответы в темах

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Сергей, по поводу цели, возможно это мои заморочки, но
    1) Если оставить URL /page/2/, то получается по структуре, что имеется лишний уровень вложенности или страница /page/ должна открываться и что то выдавать в итоге. С точки зрения SEO какая то корявая структура получается;
    2) URL в таком виде просто не нравится;
    3) Чисто спортивный интерес уже, в том можно ли сменить или нет.

    По Вашему коду из темы по ссылке, всё работает, но URL преобразуются в вид
    /page2/
    /page3/

    Опять же из-за «красоты» хочется
    /page-2/
    /page-3/

    Понимаю, где заменить «page» на «page-» в коде (3 строка):

    function my_paged_links($string, $type_of_url) {
    	if ( $type_of_url == 'paged') {
    		$string = str_replace('page/', 'page-', $string);
    	}
    	return $string;
    }
    add_filter('user_trailingslashit', 'my_paged_links', 10, 2);
    
    function my_pagenum_link($link) {
    	if ( $_SERVER['REQUEST_URI'] != '/' ) {
    		preg_match('/\/page[0-9]+/', $_SERVER['REQUEST_URI'], $matches);
    		if ( !empty($matches) ) {
    			$link = str_replace($matches[0], '', $link);
    		}
    	}
    	return $link;
    }
    add_filter('get_pagenum_link', 'my_pagenum_link');

    Тогда ссылки в пагинации преобразуются в правильные:
    /page-2/
    /page-3/
    Но сами страницы остаются с урлами:
    /page2/
    /page3/

    Можно конечно в .htaccess добавить редиректы, но, я так понимаю, и сам код можно как то поправить, чтобы урлы страниц преобразовались, но не могу понять, что именно поправить… Не подскажите? Спасибо!!!

    • Ответ изменён 5 лет, 9 месяцев назад пользователем kul86.
    • Ответ изменён 5 лет, 9 месяцев назад пользователем kul86.

    Не работает, поменял, но вообще ничего не изменилось.

    Если смотреть код, то подключается именно функция wp_pagenavi
    Но ее нигде не могу найти, в поисковиках выдается, что это типа плагин, но плагинов пагинации я не ставил.

    в function.php нужно добавить код и тогда каноникл будет на основную страницу:

    function return_canon () {
    $canon_page = get_pagenum_link(1);
    return $canon_page;
    }
    
    function canon_paged() {
    if (is_paged()) {
    add_filter( 'wpseo_canonical', 'return_canon' );
    }
    }
    add_filter('wpseo_head','canon_paged');

    Код работает только при включенном плагине WordPress Seo by Yoast.

    Форум: Плагины
    Тема: canonical YOAST

    Согласен каноникл не правильно прописан, может кому то нужно плодить такие страницы, но в большинстве случаев это дубли, поэтому в function.php нужно добавить код и тогда каноникл будет на основную страницу :

    function return_canon () {
    $canon_page = get_pagenum_link(1);
    return $canon_page;
    }
    
    function canon_paged() {
    if (is_paged()) {
    add_filter( 'wpseo_canonical', 'return_canon' );
    }
    }
    add_filter('wpseo_head','canon_paged');

    Код работает только при включенном плагине WordPress Seo by Yoast.

    Не вижу в ней аргумента «format» и не могу понять, как поправить формирование урлов у данных страниц.

    Добрый день, спасибо, что откликнулись, функция описана стандартно:

    function wp_link_pages( $args = '' ) {
    	global $page, $numpages, $multipage, $more;
    
    	$defaults = array(
    		'before'           => '<p>' . __( 'Pages:' ),
    		'after'            => '</p>',
    		'link_before'      => '',
    		'link_after'       => '',
    		'next_or_number'   => 'number',
    		'separator'        => ' ',
    		'nextpagelink'     => __( 'Next page' ),
    		'previouspagelink' => __( 'Previous page' ),
    		'pagelink'         => '%',
    		'echo'             => 1
    	);
    
    	$params = wp_parse_args( $args, $defaults );
    
    	/**
    	 * Filters the arguments used in retrieving page links for paginated posts.
    	 *
    	 * @since 3.0.0
    	 *
    	 * @param array $params An array of arguments for page links for paginated posts.
    	 */
    	$r = apply_filters( 'wp_link_pages_args', $params );
    
    	$output = '';
    	if ( $multipage ) {
    		if ( 'number' == $r['next_or_number'] ) {
    			$output .= $r['before'];
    			for ( $i = 1; $i <= $numpages; $i++ ) {
    				$link = $r['link_before'] . str_replace( '%', $i, $r['pagelink'] ) . $r['link_after'];
    				if ( $i != $page || ! $more && 1 == $page ) {
    					$link = _wp_link_page( $i ) . $link . '</a>';
    				}
    				/**
    				 * Filters the HTML output of individual page number links.
    				 *
    				 * @since 3.6.0
    				 *
    				 * @param string $link The page number HTML output.
    				 * @param int    $i    Page number for paginated posts' page links.
    				 */
    				$link = apply_filters( 'wp_link_pages_link', $link, $i );
    
    				// Use the custom links separator beginning with the second link.
    				$output .= ( 1 === $i ) ? ' ' : $r['separator'];
    				$output .= $link;
    			}
    			$output .= $r['after'];
    		} elseif ( $more ) {
    			$output .= $r['before'];
    			$prev = $page - 1;
    			if ( $prev > 0 ) {
    				$link = _wp_link_page( $prev ) . $r['link_before'] . $r['previouspagelink'] . $r['link_after'] . '</a>';
    
    				/** This filter is documented in wp-includes/post-template.php */
    				$output .= apply_filters( 'wp_link_pages_link', $link, $prev );
    			}
    			$next = $page + 1;
    			if ( $next <= $numpages ) {
    				if ( $prev ) {
    					$output .= $r['separator'];
    				}
    				$link = _wp_link_page( $next ) . $r['link_before'] . $r['nextpagelink'] . $r['link_after'] . '</a>';
    
    				/** This filter is documented in wp-includes/post-template.php */
    				$output .= apply_filters( 'wp_link_pages_link', $link, $next );
    			}
    			$output .= $r['after'];
    		}
    	}
    
    	/**
    	 * Filters the HTML output of page links for paginated posts.
    	 *
    	 * @since 3.6.0
    	 *
    	 * @param string $output HTML output of paginated posts' page links.
    	 * @param array  $args   An array of arguments.
    	 */
    	$html = apply_filters( 'wp_link_pages', $output, $args );
    
    	if ( $r['echo'] ) {
    		echo $html;
    	}
    	return $html;
    }
    
    /**
     * Helper function for wp_link_pages().
     *
     * @since 3.1.0
     * @access private
     *
     * @global WP_Rewrite $wp_rewrite
     *
     * @param int $i Page number.
     * @return string Link.
     */
    function _wp_link_page( $i ) {
    	global $wp_rewrite;
    	$post = get_post();
    	$query_args = array();
    
    	if ( 1 == $i ) {
    		$url = get_permalink();
    	} else {
    		if ( '' == get_option('permalink_structure') || in_array($post->post_status, array('draft', 'pending')) )
    			$url = add_query_arg( 'page', $i, 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/" . $i, 'single_paged');
    		else
    			$url = trailingslashit(get_permalink()) . user_trailingslashit($i, 'single_paged');
    	}
    
    	if ( is_preview() ) {
    
    		if ( ( 'draft' !== $post->post_status ) && isset( $_GET['preview_id'], $_GET['preview_nonce'] ) ) {
    			$query_args['preview_id'] = wp_unslash( $_GET['preview_id'] );
    			$query_args['preview_nonce'] = wp_unslash( $_GET['preview_nonce'] );
    		}
    
    		$url = get_preview_post_link( $post, $query_args, $url );
    	}
    
    	return '<a href="' . esc_url( $url ) . '">';
    }
Просмотр 6 ответов — с 1 по 6 (всего 6)