Utilisez register_post_type () pour modifier un type de publication existant.

22

Il existe de nombreuses situations dans lesquelles un thème ou un plug-in enregistre un type de publication et que vous souhaitez modifier. Il y a bien sûr add_post_type_support() et remove_post_type_support() , mais ceux-ci ne donnent pas accès à la liste complète des arguments pris par register_post_type() . En particulier, je souhaite peut-être désactiver une archive de type de publication, masquer l'interface utilisateur de l'administrateur, masquer la recherche, etc., tout en laissant le reste des paramètres de type de publication uniquement.

La page du codex pour register_post_type() est suspendue devant moi:

  

Description

     

Créer ou modifier un type de publication.

Mais dans le passé, lorsque j’essayais de faire cela, cela ne semblait pas marcher. Cette fonction sert-elle vraiment à modifier les types de publication et, dans l’affirmative, pouvez-vous simplement redéclarer quelques arguments et laisser le reste tranquille?

Voyant que n’est même pas une fonction deregister_post_type() , je ne comprends pas comment cela peut se faire. être fait.

    
posée mrwweb 13.09.2012 - 18:12
la source

6 réponses

15
  

Cette fonction est-elle vraiment destinée à modifier les types de publication

Oui.

  

et si oui, pouvez-vous simplement redéclarer quelques arguments et laisser le reste tranquille?

Non. Si vous souhaitez modifier les arguments d'un type de publication, vous devez utiliser get_post_type_object pour obtenir l'objet de type de publication, modifier ce que vous voulez dans cet objet, puis ré-enregistrez-le en utilisant votre type modifié en tant que nouveau paramètre $ args.

    
réponse donnée Otto 13.09.2012 - 20:59
la source
25

Après quelques recherches, aucune de ces réponses n’est à jour.

À compter du 8 décembre 2015, WordPress inclut un nouveau filtre, register_post_type_args , qui vous permet d’accrocher les arguments d’un type de publication enregistré.

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 );
    
réponse donnée Radley Sustaire 21.06.2016 - 00:32
la source
8

Voici un exemple d'utilisation du filtre 'registered_post_type' pour modifier un type de publication dans un autre plugin.

Un plugin que j'utilisais n'incluait pas d'icône de menu dans sa définition. Je voulais donc en ajouter un.

<?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 );
    
réponse donnée jjeaton 24.08.2013 - 01:49
la source
4

Accrochez-vous à 'registered_post_type' après que l'autre code l'ait enregistré. Il est appelé à la fin de register_post_type() . Vous obtenez deux arguments: $post_type et $args .
Vous pouvez maintenant tout changer pour ce type de message. Inspectez $GLOBALS['wp_post_types'] pour certaines options.

    
réponse donnée fuxia 13.09.2012 - 18:19
la source
0

J'ai rencontré le même problème avec le plug-in Calendrier des événements .

J'ai ajouté le code ci-dessous à function.php pour modifier le type de publication 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 );
    
réponse donnée Abouasy 12.02.2017 - 21:26
la source
0

Je ne sais pas si c'est moche, mais vous pouvez modifier le paramètre fictif GLOBAL "à la volée" chaque fois que vous devez manipuler un seul argument. Voici comment nous utilisons un type de message non public contents pour être acceptable dans le menu admin. Nous raccrochons avant et après le rendu du menu:

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

Dans notre cas, nous souhaitons que le plugin Liste de messages du menu Admin accepte notre type de message, car ils appellent return get_post_types(array('public' => true)); dans leur hook avec la priorité 11 ...

Développeurs - Veuillez commenter si cela pouvait poser problème.

    
réponse donnée Jonas Lundman 19.09.2018 - 00:42
la source

Lire d'autres questions sur les étiquettes