Use register_post_type () para modificar un tipo de publicación existente

22

Hay muchas situaciones en las que un tema o complemento registra un tipo de publicación y desea modificarlo. Por supuesto, hay add_post_type_support() y remove_post_type_support() , pero esos no dan acceso a la lista completa de argumentos que toma register_post_type() . En particular, tal vez quiera deshabilitar un archivo de tipo de publicación, ocultar la interfaz de usuario del administrador, ocultarme de la búsqueda, etc., dejando solo el resto de la configuración de tipo de publicación.

La página del códice para register_post_type() cuelga esto delante de mí:

  

Descripción

     

Crea o modifica un tipo de publicación.

Pero en el pasado, cuando intenté hacer esto, no pareció funcionar. ¿Es esta función realmente para modificar tipos de publicaciones, y si es así, puedes simplemente volver a declarar un par de argumentos y dejar el resto en paz?

Al ver que no existe una función deregister_post_type() , no entiendo cómo puede estar hecho.

    
pregunta mrwweb 13.09.2012 - 18:12

6 respuestas

15
  

¿Es esta función realmente para modificar tipos de publicaciones

Sí.

  

y si es así, ¿puedes simplemente volver a declarar un par de argumentos y dejar el resto en paz?

No. Si desea modificar los argumentos a un tipo de publicación, necesita usar get_post_type_object para obtener el objeto de tipo de publicación, modificar lo que desea en él, y luego volver a registrarlo con su tipo modificado como el nuevo parámetro $ args.

    
respondido por el Otto 13.09.2012 - 20:59
25

Después de algunas investigaciones, encontré que ninguna de estas respuestas está actualizada.

A partir del 8 de diciembre de 2015, WordPress incluye un nuevo filtro, register_post_type_args , que te permite enganchar los argumentos de un tipo de publicación registrada.

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

Este es un ejemplo de cómo usar el filtro 'registered_post_type' para modificar un tipo de publicación en otro complemento.

Un complemento que estaba usando no incluía un menu_icon en su definición, así que quería agregar uno propio.

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

Enganche en 'registered_post_type' después de que el otro código lo haya registrado. Se llama al final de register_post_type() . Obtienes dos argumentos: $post_type y $args .
Ahora puedes cambiar cualquier cosa para este tipo de publicación. Inspeccione $GLOBALS['wp_post_types'] para algunas opciones.

    
respondido por el fuxia 13.09.2012 - 18:19
0

Enfrenté lo mismo con El complemento Calendario de eventos .

Agregué el siguiente código a function.php para modificar el tribe_organizer tipo de publicación

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

No sé si esto es feo, pero podría modificar el marcador de posición GLOBAL "sobre la marcha" siempre que necesite manipular un solo argumento. Así es como usamos un tipo de publicación no pública contents para que sea aceptable en el menú de administración. Nos enganchamos cerca antes y cerramos después de que aparezca el menú:

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

En nuestro caso, queremos que el complemento de la Lista de Publicaciones del Menú de Administración acepte nuestro tipo de publicación, ya que llaman a return get_post_types(array('public' => true)); dentro de su gancho con prioridad 11 ...

Desarrolladores: haga un comentario si esto pudiera resolver algún problema.

    
respondido por el Jonas Lundman 19.09.2018 - 00:42

Lea otras preguntas en las etiquetas