functions.php를 통해 퍼머 링크 구조를 설정하는 방법


10

Wordpress Network를 설정하고 모든 새 사이트가 동일한 퍼머 링크 구조 (예 : "/ % year % / % monthnum % / % postname % /")를 갖기를 원했습니다. 이것이 기능을 선택할 때 사용자에게 의존하지 않고 functions.php에서 후크 또는 해킹을 통해 수행 할 수 있는지 궁금합니다.

답변:


15

set_permalink_structure()글로벌 $wp_rewrite객체 의 메소드를 호출하여 퍼머 링크 구조를 설정할 수 있습니다 .

add_action( 'init', function() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
} );

오류가 발생하는 경우를 대비하여 PHP <5.3 버전의 코드가 있습니다.

function reset_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
}
add_action( 'init', 'reset_permalinks' );

코드를 복사하여 붙여 넣으면 오류가 발생하지만 그 근거는 그 트릭입니다! 그래도 내 질문 / 의도가 좋은 습관인지 궁금합니다 ...
Tomas Buteler

1
토마스, 답변을 받아 주셔서 감사합니다. 도움을 주셔서 감사합니다. 모범 사례와 관련하여-귀하의 목표가 웹 사이트에서 그러한 퍼머 링크 구조를 시행하고 잠그는 것이 타당하다고 생각합니다. 그리고 '잠금'이란 코드가 관리자를 통해 구조를 변경할 수 없다는 것을 의미합니다. 괜찮다면이 작업을 수행해도 괜찮습니다.
soulseekah

1
작동하지만 관리자가 permalink 페이지 (게시물 404)에서 저장할 때 충돌이 발생합니다. 그런 다음 사이트가로드되면 (프로세스 초기화 후크) 퍼머 링크 구조가 다시 변경됩니다 (포스트에서 다시 404). 를 사용 $wp_rewrite->flush_rules();하면 문제가 해결됩니다. init에서 사용하고 매번 실행하는 나쁜 습관입니다. 퍼머 링크 페이지를 방문하면 트릭을 수행 할 수 있습니다.
Sisir

1
전체 의도는 permalinks 옵션 페이지를 비활성화하는 것이 었습니다.
Tomas Buteler

3
'after_switch_theme'또는 플러그인 활성화시 호출되어야하며 'flush_rewrite_rules ()'가
이어져야합니다

2

이전 답변이 작동하지 않습니다. 나는 순수한 해결책을 얻었다. 이 코드 사용을 사용할 수 있습니다. 100 % 작동합니다. 감사

/**
 * Rewrite set up, when theme activate i mean
 */
if (isset($_GET['activated']) && is_admin()) {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}

/**
* Redirect to Permalink setting Page.
* Otherwise Redirect rule will not work Properly.
*/
function redirect_to_permalink() {

    wp_redirect('options-permalink.php');
}
add_action( 'after_switch_theme', 'redirect_to_permalink' );

0
function setPermaLink(){
    $ps = '/%category%/%postname%/';
    $permalink_structure = sanitize_option( 'permalink_structure', $ps);
    $blog_prefix = '/blog';
    $prefix = '/index.php';

    if ( ! empty( $permalink_structure ) ) {
        $permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) );
        if ( $prefix && $blog_prefix ) {
            $permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure );
        } else {
            $permalink_structure = $blog_prefix . $permalink_structure;
        }
    }

    $wp_rewrite->set_permalink_structure( $permalink_structure );
    flush_rewrite_rules();
}

setPermaLink();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.