programing

WordPress에서 작성자 기반을 제거하는 방법

newstyles 2023. 6. 18. 12:26

WordPress에서 작성자 기반을 제거하는 방법

WordPress의 표준 작성자 링크는 다음과 같습니다.example.com/author/johnsmith

다음을 제거하고 싶습니다.author/사용자 이름이 루트에 있도록 URL의 일부입니다.예:example.com/johnsmith

저는 제 사이트에서 페이지 작성을 제어하여 페이지와 작성자 이름이 충돌할 가능성이 없습니다.

지금까지 WP Snipet에서 다음 솔루션을 시도했지만 더 이상 작동하지 않는 것 같습니다.

add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) {
    global $wpdb;
    $author_rewrite = array();
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");   
    foreach($authors as $author) {
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
    }  
    return $author_rewrite;
}


add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", '', $link);
    return $link_base . $link;
}

이것에 대한 효과적인 해결책이 있는지 아는 사람이 있습니까?

저는 이 결합된 솔루션을 테스트했지만 영구 링크를 재생성하기 전에는 작동하지 않았습니다.brasfolio에서 설명한 대로 대시보드의 영구 링크 페이지에 저장을 클릭하면 됩니다.

add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) {
   global $wpdb;
   $author_rewrite = array();
   $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");   
   foreach($authors as $author) {
       $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
       $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
   }  
   return $author_rewrite;
}

if( !is_admin() ) {
add_action('init', 'author_rewrite_so_22115103');
}

function author_rewrite_so_22115103() {
   global $wp_rewrite; 
   if( 'author' == $wp_rewrite->author_base ) $wp_rewrite->author_base = null;
}

코드가 정상인 것 같습니다.이러한 변경사항을 반영하기 위해 수동으로 영구 링크 구조를 플러시합니다.

1)  Settings -> Permalinks -> choose default -> Save
2)  Revert the settings to original.

시도: RedirectMatch 301^/author/(.+)$ http://www.yourblog.com/$1

이것은 당신의 .htaccess에 들어갈 것입니다.

또한 피드를 리디렉션하려면 다른 유사한 두 개 근처에 이 값을 추가합니다.

$author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';

퍼멀링크 구조를 새로 고쳐야 하는 것 같은데, 매번 누군가가 새 규칙을 등록합니다.

따라서 다음을 사용하여 자동으로 플러시합니다.

$wp_rewrite->flush_rules();

당신의 기능에.php 파일.

저도 같은 문제가 있었지만 이것으로 문제가 없는 것 같습니다.하지만 여전히 페이지와 게시물 이름에 대한 충돌 문제가 있습니다.

이 질문은 이 질문과 유사합니다...

이런 거 할 수 있어요.이건 당신이 원했던 거나 다름없어요

이게 효과가 있기를...

언급URL : https://stackoverflow.com/questions/22115103/how-to-remove-author-base-in-wordpress