[WordPress] Une fonction pour créer ses Custom Post Types


WordPress permet de créer des types d’articles personnalisés, qui permettent de proposer une interface et une taxonomie propre. Mais pour arriver à ce résultat, il faut écrire pas mal de code PHP.
Une configuration complète peut vite prendre 50 lignes, avec des labels dans tous les sens. Et si vous avez plusieurs Custom Post Types, ….

Voici une fonction proposée par Deluxe Blog Tips qui permet d’enregistrer ses Custom Post Types très rapidement, en 2 lignes de code.

Tout d’abord il faut créer la fameuse fonction, une seule fois, et la placer dans une plugin ou dans le fichier functions.php de votre thème.

    function rw_register_post_type( $post_type = '', $args = array() )
    {
    if ( empty( $post_type ) )
    return;
    $singular = empty( $args['singular'] ) ? $post_type : $args['singular'];
    $singular = str_replace( '_', ' ', $singular );
    $singular = ucwords( $singular );
    $plural = empty( $args['plural'] ) ? "{$singular}s" : $args['plural'];
    $plural = ucwords( $plural );
    $plural_lower = strtolower( $plural );
    $args['labels'] = empty( $args['labels'] ) ? array() : $args['labels'];
    $args['labels'] = wp_parse_args( $args['labels'], array(
    'name' => $plural,
    'singular_name' => $singular,
    'add_new' => __( 'Add New', 'your_textdomain' ),
    'add_new_item' => sprintf( __( 'Add New %s', 'your_textdomain' ), $singular ),
    'edit_item' => sprintf( __( 'Edit %s', 'your_textdomain' ), $singular ),
    'new_item' => sprintf( __( 'New %s', 'your_textdomain' ), $singular ),
    'view_item' => sprintf( __( 'View %s', 'your_textdomain' ), $singular ),
    'search_items' => sprintf( __( 'Search %s', 'your_textdomain' ), $plural ),
    'not_found' => sprintf( __( 'No %s found', 'your_textdomain' ), $plural_lower ),
    'not_found_in_trash' => sprintf( __( 'No %s found in Trash', 'your_textdomain' ), $plural_lower ),
    'parent_item_colon' => null,
    'all_items' => sprintf( __( 'All %s', 'your_textdomain' ), $plural ),
    'menu_name' => $plural,
    ) );
    $args = wp_parse_args( $args, array(
    'public' => true,
    ) );
    register_post_type( $post_type, $args );
    }

La suite est on ne peut plus simple :

rw_register_post_type( 'book' );
rw_register_post_type( 'movie' );

Et si vous voulez personnaliser un peu plus, voici quelques options :

rw_register_post_type( 'company', array('plural' => 'companies') );

rw_register_post_type( 'company', array(
    'hierarchy' => 'true',
    'public' => false,
    ) );

Voila une petite fonction bien pratique qui vous fera gagner du temps et probablement une peu de performance sir vous utilisez beaucoup de Custom Post Types.