register_post_type ()을 사용하여 기존 게시물 유형을 수정하십시오.


29

테마 또는 플러그인이 게시물 유형을 등록하고 수정하려는 상황이 많이 있습니다. 물론 add_post_type_support()remove_post_type_support()이 있지만, 인수의 전체 목록에 액세스 할 수는 없습니다 register_post_type(). 특히 게시물 유형 보관을 사용 중지하고, 관리 UI를 숨기고, 검색에서 숨기는 등 나머지 게시물 유형 설정은 그대로 둡니다.

에 대한 코덱스 페이지register_post_type() 내 앞에 매 단다이 :

기술

게시물 유형을 작성하거나 수정하십시오.

그러나 과거 에이 작업을 시도했을 때 작동하지 않는 것 같습니다. 이 함수는 실제로 게시물 유형을 수정하기위한 것입니까? 그렇다면 몇 개의 인수를 다시 선언하고 나머지는 그대로 두어도됩니다.

이 것을보고 도 아니다 deregister_post_type()기능 , 나는 그것을 할 수있는 방법을 이해하지 않습니다.

답변:


18

이 기능은 실제로 게시물 유형을 수정하는 데 사용됩니까?

예.

그렇다면 몇 가지 주장을 다시 선언하고 나머지는 그대로 내버려 둘 수 있습니까?

아니요. 인수를 게시물 유형으로 수정 get_post_type_object하려면 게시물 유형 개체를 가져 와서 원하는 것을 수정 한 다음 수정 된 유형을 새 $ args 매개 변수로 사용하여 다시 등록해야합니다.


동일한 인수를 수정하여 두 번 연속 호출하는 register_post_type것이 정확합니까? 나는 당신의 "예"에 의해 가정하고 오류를 덤프하지 않으며 원하는 효과를냅니다. 실제 사례는이 답변에 제시된 두 번째 옵션입니다. wordpress.stackexchange.com/a/74331/12615
brasofilo

예, 작동하지만 그렇게 해야하는 경우 같은 게시물 유형을 반복해서 반복해서 등록하지 못하게하려면 일부 필터 또는 다른 것을 추가해야합니다. 기본적으로 인수를 먼저 정렬 한 다음 등록하십시오.
오토

플러그인 바로 앞에 제공된 후크 때문에 생각했습니다 register_post_type. 실제로는 필요가 없습니다. 피드백에 대한 "기록을위한"질문이었습니다.
brasofilo

34

몇 가지 연구를 한 결과 최신 답변이 없습니다.

2015 년 12 월 8 일부터 WordPress에는 새로운 필터가 포함되어 register_post_type_args있어 등록 된 게시물 유형의 인수에 연결할 수 있습니다.

function wp1482371_custom_post_type_args( $args, $post_type ) {
    if ( $post_type == "animal-species" ) {
        $args['rewrite'] = array(
            'slug' => 'animal'
        );
    }

    return $args;
}
add_filter( 'register_post_type_args', 'wp1482371_custom_post_type_args', 20, 2 );

6
이것이 지금 올바른 방법입니다.
Dave Romsey

6
이것은 받아 들일
만한

런타임에 등록한 후 업데이트해야한다면 어떻게해야합니까? 예 : 이후init
Lucas Bustamante

@LucasBustamante 그것은 중요하지 않습니다. 플러그인 / 테마 동안 'add_filter'라인을 호출하십시오. 모든 register_post_type기능 중에 필터가 호출됩니다 . 내 코드가 작동하지 않는 유일한 시나리오는 게시물 유형이 올바르게 등록되지 않은 경우입니다. 모든 게시물 유형은 init hook 동안 등록해야합니다. 코덱에서 : "register_post_type은 'init'전에 호출하면 작동하지 않으며, 새로 생성되거나 수정 된 포스트 유형의 측면은 나중에 호출하면 잘못 작동합니다." 그래도 도움이 필요하면 새 질문에 자세한 내용을 게시하십시오.
Radley Sustaire

8

다음은 'registered_post_type'필터를 사용하여 다른 플러그인에서 게시물 유형을 수정하는 방법에 대한 예입니다 .

내가 사용하고있는 플러그인에는 정의에 menu_icon이 포함되어 있지 않으므로 내 플러그인 중 하나를 추가하고 싶었습니다.

<?php
/**
 * Add a menu icon to the WP-VeriteCo Timeline CPT
 *
 * The timeline plugin doesn't have a menu icon, so we hook into 'registered_post_type'
 * and add our own.
 *
 * @param  string $post_type the name of the post type
 * @param  object $args the post type args
 */
function wpse_65075_modify_timeline_menu_icon( $post_type, $args ) {
    // Make sure we're only editing the post type we want
    if ( 'timeline' != $post_type )
        return;

    // Set menu icon
    $args->menu_icon = get_stylesheet_directory_uri() . '/img/admin/menu-timeline.png';

    // Modify post type object
    global $wp_post_types;
    $wp_post_types[$post_type] = $args;
}
add_action( 'registered_post_type', 'wpse_65075_modify_timeline_menu_icon', 10, 2 );

이것은 대부분의 경우 훨씬 깔끔한 방법입니다. 그러나이 필터는 너무 늦어서 다시 쓰기에 의해 포착되지 않으므로 해당 상황에서 대신 허용 된 답변을 사용해야합니다.
mrwweb

4

'registered_post_type'다른 코드가 등록한 후 연결 하십시오. 의 끝에 호출됩니다 register_post_type(). 두 개의 인수가 있습니다 : $post_type$args.
이제이 게시물 유형에 대한 내용을 변경할 수 있습니다. $GLOBALS['wp_post_types']일부 옵션을 검사하십시오 .


저 갈고리를 가리켜 줘서 고마워 게시물 유형을 수정하는 방법 에 대한 (더 중요한) 질문에 대답 하지만 register_post_type()"수정"을 포함 하는 설명은 어떻습니까? 그게 잘못이야? 인터넷 말을 타고이 순간 코덱스에서 정복해야합니까?
mrwweb

2
$wp_post_types[$post_type] = $args;… 속성을 변경할 수 있어야합니다. 질문에 실패한 코드의 예를 추가하십시오.
fuxia

0

나는 Events Calendar 플러그인 과 같은 문제에 직면했다 .

tribe_organizer 포스트 유형 을 수정하기 위해 function.php에 아래 코드를 추가했습니다.

function tribe_modify_organizer() {
 //New arguments
    $tribe_organizer_args = get_post_type_object('tribe_organizer'); // get the post type to modify
    $tribe_organizer_args-> taxonomies = array('post_tag' , 'tribe_events_cat'); // add taxonomies support
    $tribe_organizer_args-> exclude_from_search = false; // show in search result
 //re-register the same post type includeing the new args
    register_post_type( 'tribe_organizer', $tribe_organizer_args );
}
add_action( 'init', 'tribe_modify_organizer', 100 );

0

이것이 추악한 지 모르겠지만 GLOBAL단일 인수를 조작해야 할 때마다 자리 표시자를 "즉시" 변경할 수 있습니다 . contents관리 메뉴에서 비공개 게시물 유형 을 허용하는 방식입니다. 메뉴가 렌더링되기 전과 후에 닫습니다.

function entex_theme_make_contents_public(){
    $GLOBALS['wp_post_types']['contents']->public = true;
}
add_action('admin_menu', 'entex_theme_make_contents_public', 10);

function entex_theme_make_contents_private_again(){
    $GLOBALS['wp_post_types']['contents']->public = '';
}
add_action('admin_menu', 'entex_theme_make_contents_private_again', 12);

우리의 경우, 우리는 Admin Menu Post List 플러그인 return get_post_types(array('public' => true));이 우선 순위 11로 후크 내부 를 호출 할 때 우리의 게시물 유형을 수락하기를 원합니다 ...

개발자-문제를 일으킬 수있는 경우 의견을 말하십시오.

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