programing

워드프레스의 기본 게시물을 프로그래밍 방식으로 변경하는 방법은?

magicmemo 2023. 7. 20. 21:50
반응형

워드프레스의 기본 게시물을 프로그래밍 방식으로 변경하는 방법은?

Wordpress의 백엔드에서 기본값 사용http://localhost/sitename/example-post/영구 링크를 만들기 위한 값입니다.

사용자 지정 게시물 유형에 대해 사용자 지정 슬러그를 다음과 같이 정의했습니다.services예:

register_post_type( 'service',
    array(
        'labels'      => array(
            'name'          => __( 'Services' ),
            'singular_name' => __( 'Service' )
        ),
        'public'      => true,
        'has_archive' => true,
        'rewrite'     => array(
            'slug'       => 'services',
            'with_front' => true
        ),
        'supports'    => array(
            'title',
            'editor',
            'excerpt',
            'thumbnail'
        ),
        'taxonomies'  => array( 'category' ),
    )
);

서비스/포스트 네임을 생성합니다.

또한 이 후크를 사용하여 사용자 정의 페이지를 만들고 링크별 사용자 정의 페이지를 만듭니다.

function custom_base_rules() {
    global $wp_rewrite;

    $wp_rewrite->page_structure = $wp_rewrite->root . '/page/%pagename%/';
}

add_action( 'init', 'custom_base_rules' );

페이지/포스트 이름을 만듭니다.

이제 제가 해야 할 일은 일반적인 워드프레스 게시물을 위한 다른 사용자 정의 퍼멀링크 경로를 만드는 것입니다.

그래서 결과 세계는 포스트 타입을 위한 것입니다.post:

우편/우편 이름

퍼멀 링크를 처리하는 기본 방법을 이미 정의했기 때문에 이에 대해 백업된 것을 사용할 수 없습니다.이미 사용자 지정 게시물 유형 및 페이지의 경로를 다시 작성했습니다.

정상을 다시 작성하려면 어떻게 해야 합니까?postWordpress에서 프로그래밍 방식으로 permal 링크 경로 유형을 게시하시겠습니까?

당신은 그것을 두 단계로 할 필요가 있습니다.

먼저 다음을 사용하여 다시 쓰기 사용'with_front' => true빌트인 포스트 등록용.

add_filter(
    'register_post_type_args',
    function ($args, $post_type) {
        if ($post_type !== 'post') {
            return $args;
        }

        $args['rewrite'] = [
            'slug' => 'posts',
            'with_front' => true,
        ];

        return $args;
    },
    10,
    2
);

이 URL은 다음과 같습니다.http://foo.example/posts/a-title에서 생성된 링크가 잘못되었습니다.

기본 제공 게시물에 대한 사용자 지정 퍼멀링크 구조를 강제로 적용하여 링크를 수정할 수 있습니다.

add_filter(
    'pre_post_link',
    function ($permalink, $post) {
        if ($post->post_type !== 'post') {
            return $permalink;
        }

        return '/posts/%postname%/';
    },
    10,
    2
);

https://github.com/WordPress/WordPress/blob/d46f9b4fb8fdf64e02a4a995c0c2ce9f014b9cb7/wp-includes/link-template.php#L166 을 참조하십시오.

게시물은 기본 퍼멀링크 구조를 사용해야 하며, 페이지 또는 사용자 지정 게시물 유형과 같은 방식으로 다시 쓰기 개체에 특별한 항목이 없습니다.기본 구조를 프로그래밍 방식으로 변경하려면 후크에 이와 같은 것을 추가할 수 있습니다.

$wp_rewrite->permalink_structure = '/post/%postname%';

당신이 무슨 말을 하는지 잘 모르겠어요

퍼멀 링크를 처리하는 기본 방법을 이미 정의했기 때문에 이에 대해 백업된 것을 사용할 수 없습니다.이미 사용자 지정 게시물 유형 및 페이지의 경로를 다시 작성했습니다.

게시물을 제외한 모든 곳에서 퍼멀 링크의 기본 동작을 재정의하는 것처럼 들리므로 기본값을 변경하면 게시물에만 영향을 줄 수 있습니다.

permalink_structure젠틀맨 맥스가 제안한 재산은 나에게 효과가 없었습니다.하지만 저는 set_permalink_structure()라는 작동하는 메서드를 찾았습니다.아래 코드 예제를 참조하십시오.

function custom_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->page_structure = $wp_rewrite->root . '/page/%pagename%/'; // custom page permalinks
    $wp_rewrite->set_permalink_structure( $wp_rewrite->root . '/post/%postname%/' ); // custom post permalinks
}

add_action( 'init', 'custom_permalinks' );

언급URL : https://stackoverflow.com/questions/52427918/how-to-change-wordpress-default-posts-permalinks-programmatically

반응형