Use register_post_type () para modificar um tipo de postagem existente

22

Existem muitas situações em que um tema ou plug-in registra um tipo de postagem e você deseja modificá-lo. Existe, é claro, add_post_type_support() e remove_post_type_support() , mas esses não dão acesso à lista completa de argumentos que register_post_type() leva. Em particular, talvez eu queira desativar um arquivo de tipo de postagem, ocultar a interface do usuário do administrador, ocultar a pesquisa, etc., deixando o resto das configurações de tipo de postagem sozinho.

A página do Codex para register_post_type() balança isso na minha frente:

  

Descrição

     

Crie ou modifique um tipo de postagem.

Mas, no passado, quando tentei fazer isso, não funcionou. Essa função é realmente para modificar os tipos de postagem e, em caso afirmativo, você pode simplesmente redeclarar alguns argumentos e deixar o restante em paz?

Ver que não é nem mesmo uma função deregister_post_type() , não entendo como é possível ser feito.

    
por mrwweb 13.09.2012 / 18:12
fonte

6 respostas

15
  

Esta função é realmente para modificar tipos de postagem

Sim.

  

e se sim, você pode simplesmente redeclarar alguns argumentos e deixar o resto em paz?

Não. Se você quiser modificar argumentos para um tipo de postagem, você precisa usar get_post_type_object para obter o objeto de tipo de postagem, modificar o que deseja nele e registrá-lo novamente usando seu tipo modificado como o novo parâmetro $ args.

    
por Otto 13.09.2012 / 20:59
fonte
25

Após algumas pesquisas, não encontrei nenhuma dessas respostas atualizadas.

A partir de 8 de dezembro de 2015, o WordPress inclui um novo filtro, register_post_type_args , que permite conectar os argumentos de um tipo de postagem registrado.

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 );
    
por Radley Sustaire 21.06.2016 / 00:32
fonte
8

Veja um exemplo de como usar o filtro 'registered_post_type' para modificar um tipo de postagem em outro plug-in.

Um plugin que eu estava usando não incluiu um menu_icon em sua definição, então eu quis adicionar um dos meus.

<?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 );
    
por jjeaton 24.08.2013 / 01:49
fonte
4

Conecte em 'registered_post_type' após o outro código ter sido registrado. É chamado no final de register_post_type() . Você recebe dois argumentos: $post_type e $args .
Agora você pode mudar qualquer coisa para este tipo de postagem. Inspecione $GLOBALS['wp_post_types'] para algumas opções.

    
por fuxia 13.09.2012 / 18:19
fonte
0

Eu enfrentei a mesma coisa com o O plug-in de calendário de eventos .

Adicionei o código abaixo ao function.php para modificar o tipo de postagem tribe_organizer

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 );
    
por Abouasy 12.02.2017 / 21:26
fonte
0

Eu não sei se isso é feio, mas você pode alterar o espaço reservado GLOBAL "on the fly" sempre que precisar manipular um único argumento. É assim que usamos um tipo de postagem não pública contents para ser aceitável no menu admin. Nos fechamos antes e fechamos depois que o menu renderiza:

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);

Em nosso caso, queremos que o plug-in Lista de postagens do Menu do administrador aceite nosso tipo de postagem, pois eles chamam return get_post_types(array('public' => true)); dentro de seu gancho com prioridade 11 ...

Desenvolvedores - Faça um comentário se isso puder causar problemas.

    
por Jonas Lundman 19.09.2018 / 00:42
fonte