it-swarm-ko.tech

범주 페이지 매김에서 용어 "범주"를 제거하는 방법은 무엇입니까?

예를 들어, 카테고리가 있습니다. /wiki/https://buhehe.de/wiki/

URL에서 "카테고리"라는 용어를 삭제했지만 참조하십시오 : https://buhehe.de/wiki/page/2

두 번째 카테고리 페이지는 표시되지 않지만 실제로는 두 번째 카테고리 페이지가 있습니다.

문제가 어디에 있습니까?

6

페이지 매김의 문제는 왜 발생합니까?

wiki이라는 카테고리가 있다고 가정 해보십시오.

이제 https://example.com/wiki 대신 https://example.com/category/wiki와 같은 카테고리 URL이 있고 다음과 같은 페이지 또는 게시 URL을 말한 경우 :

https://example.com/a-page
or
https://example.com/category-slug/a-post

WordPress는 https://example.com/wiki/page/2이 다른 페이지/게시물의 두 번째 페이지인지 또는 카테고리 아카이브의 두 번째 페이지인지 알 수있는 방법이 없습니다. 왜냐하면 wiki은 (는) 페이지 슬러그이거나 page이 (가) 카테고리 wiki의 게시물 슬러그 일 수 있기 때문입니다.

이것은 WordPress가 /page/2 부분과 다른 여러 부분으로 페이지가 매겨진 페이지 또는 게시물 로 혼동하기 때문에 특히 발생합니다.

따라서 wiki 카테고리 아카이브의 다음 페이지를로드하는 대신 WordPress는 슬러그 page을 사용하여 페이지 매김 게시물을로드하려고 시도하며 카테고리 아카이브의 두 번째 페이지를 가져 오는 대신 404 (페이지를 찾을 수 없음) 오류가 표시됩니다.

이 문제에 대한 해결책을 제시하기 전에 먼저 퍼머 링크가 올바른지 확인하십시오.

필요한 카테고리 URL 구조를 얻으려면 다음을 수행하십시오.

원하는 URL 구조는 약간의 작업이 필요합니다. 따라서 이미 완료하지 않은 경우 아래 지침에 따라 URL 구조를 완성하십시오.

# URL structure for Categories
https://example.com/category-slug

이것을 위해 :

  1. WordPress Admin Panel MenuSettings (으)로 이동하십시오.
  2. . 텍스트 필드에 단일 점 (Category base)을 입력하십시오.
  3. 딸깍 하는 소리 Save Changes 단추.

# URL structure for Posts
https://example.com/category-slug/post-slug

이것을 위해 :

  1. WordPress Admin Panel MenuSettings (으)로 이동하십시오.
  2. Custom Structure를 선택하고 /%category%/%postname%/ 텍스트 필드에 Custom Structure를 입력하십시오.
  3. 딸깍 하는 소리 Save Changes 단추.

카테고리 페이지 매김 문제 해결 :

일부 SEO 플러그인에는이 문제에 대한 해결책이 있습니다. 그러나 이것이 사이트의 핵심 URL 구조 문제이므로 SEO 플러그인에 의존하지 않는 것이 좋습니다. SEO 플러그인을 나중에 변경하고 다른 플러그인에 더 나은 옵션이 있지만이를위한 솔루션을 제공하지 않는다면 어떻게할까요?

따라서이 문제 만 수정하는 간단한 플러그인을 사용하는 것이 좋습니다. 다음 CODE를 사용하여 플러그인 디렉토리에서 파일 이름 category-pagination-fix.php로 저장 한 다음 사이트의 관리 패널에서 Category Pagination Fix라는 플러그인을 활성화 할 수 있습니다.

<?php
/*
Plugin Name:  Category Pagination Fix
Plugin URI:   https://wordpress.stackexchange.com/a/311858/110572
Description:  Fix category pagination
Version:      1.0.0
Author:       Fayaz Ahmed
Author URI:   https://www.fayazmiraz.com/
*/

function wpse311858_fix_category_pagination( $query_string = array() )
{
    if( isset( $query_string['category_name'] )
            && isset( $query_string['name'] ) && $query_string['name'] === 'page'
            && isset( $query_string['page'] ) ) {
        $paged = trim( $query_string['page'], '/' );
        if( is_numeric( $paged ) ) {
            // we are not allowing 'page' as a page or post slug 
            unset( $query_string['name'] );
            unset( $query_string['page'] )  ;

            // for a category archive, proper pagination query string  is 'paged'
            $query_string['paged'] = ( int ) $paged;
        }
    }   
    return $query_string;
}
add_filter( 'request', 'wpse311858_fix_category_pagination' );

대체 솔루션 :

위의 솔루션은 다음과 같은 카테고리 URL이있을 때 페이지 매김과 완벽하게 작동합니다.

https://example.com/category-slug/

게시물 URL은 다음과 같습니다.

https://example.com/category-slug/post-slug

그러나 다음과 같은 하위 카테고리 URL이있는 경우 :

https://example.com/category-slug/sub-category-slug

또는, 다음과 같은 게시 URL이있는 경우 :

https://example.com/post-slug

위의 간단한 해결책은 작동하지 않습니다.

이러한 경우에는 카테고리 URL 제거 와 같은 플러그인을 사용할 수 있습니다.

이러한 종류의 플러그인은 기본 URL 재 작성을 변경하므로 이러한 플러그인 중 하나를 사용하면 일부 기본 WordPress 동작이 예상대로 작동하지 않을 수 있습니다. 그러므로 가장 적합한 솔루션을 사용하십시오. 그러나 여러 플러그인에서 동일한 작업을 수행하지 않도록하십시오 .

주의 : 이러한 종류의 헤드리스 아카이브 URL (예 : category 또는 카테고리 페이지 링크에 대한 유사한 용어 사용 안함, tag 또는 유사한 용어는 태그 페이지 링크 등에 사용됨) .) 페이지 및 게시물 URL (들)과 내부 충돌을 만듭니다. WordPress 엔진은로드 할 대상과 실행하지 않을 대상을 결정하기 위해 내부 검사가 많이 필요합니다. 그 과정은 배가 고프다. 따라서 사이트에 수천 개의 페이지, 게시물, 카테고리, 태그 등이있는 경우 URL에서이 용어를 사용하는 것이 좋습니다.

4
Fayaz

Yoast Plugin - 카테고리 제거

Yoast )에 제거 카테고리옵션이있는 SEO 플러그인을 사용하거나 아래 링크 중 일부에서 설명하는 기능을 직접 프로그래밍 할 수 있습니다.

당신을 도울 수있는 관련 게시물 :

wordpress url에서 카테고리를 삭제하는 방법?

제거 카테고리 & 태그를 워드 프레스 url에서 - 플러그인없이

2
Cryptomanic

여기 내 해결책이있다.

이 경우에도 페이지가 페이지별로 나옵니다.

시도해보고 작동하는지 알려주세요.

// Remove category from URL
add_filter('user_trailingslashit', 'wpse311858_remove_category_from_url');
function wpse311858_remove_category_from_url($link) {
  return str_replace("/category/", "/", $link);
}

// Add new category URLs
add_filter('generate_rewrite_rules', 'wpse311858_category_rewrite');
function wpse311858_category_rewrite($wp_rewrite) {
  $new_rules = [];

  // Get all the categories including empty categories
  $cats = get_categories(['exclude' => 1, 'hide_empty' => false ]); //exclude uncategorized catagory if there were 

  // Loop through each category to add new rules to core rewrite pattern
  foreach( $cats as $cat ) {
    $cat_nicename = $cat->slug;

    // Check if it is parent or child category
    if( $cat->parent !== 0 ) {
      $cat_nicename = get_category_parents( $cat->parent, false, '/', true ) . $cat_nicename;
    }

    // For each pattern
    $new_rules['(' . $cat_nicename . ')/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]'; // for feed pattern
    $new_rules['(' . $cat_nicename . ')/(.+?)/(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]'; // for another feed pattern
    $new_rules['(' . $cat_nicename . ')/(.+?)/embed/?$'] = 'index.php?category_name=$matches[1]&embed=true'; // for embed page
    $new_rules['(' . $cat_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]'; // for paged page
    $new_rules['(' . $cat_nicename . ')/?$'] = 'index.php?category_name=$matches[1]'; // for category archive page

  } //endforeach

  // Finally add new rules
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
0
norixxx